-
-
Notifications
You must be signed in to change notification settings - Fork 232
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
实现一个sleep函数 #159
Comments
function sleep(delay: number): Promise<void> {
return new Promise(resolve => {
setTimeout(resolve, delay);
});
} |
const sleep = (ms: number) => new Promise((r) => setTimeout(r, ms)); |
const sleep = (time = 0) => new Promise((resolve) => setTimeout(resolve, time)) |
const sleep = (delay: number) => {
return new Promise(resolve => {
setTimeout(() => {
resolve()
}, delay* 1000)
})
} |
额这不对吧, sleep函数的定义固然有延时, 更重要的是还要中断程序并抛出中断异常才对, 比如java: try{
Thread.sleep(3000);
} catch (InterruptedException e){
e.printStackTrace();
} 我的想法是用while(true)做中断, 或者node环境的话可以用Atomics.wait貌似也可以(因为浏览器环境不支持SharedBuffer了), function sleep (delay = 1000) {
return cb => {
let startTime = +(new Date());
let curTime = startTime;
while (true) {
curTime = +(new Date());
if (curTime - startTime >= delay) {
cb()
break
};
}
throw Error("SLEEP ERROR")
}
} |
他们的意思是 因为 返回的是一个promise 所以 可以使用await 来等待时间结束 才继续执行后续代码 |
<script>
// 普通版本
function sleep (slTime) {
let start = new Date()
while(new Date - start <= slTime) {}
}
const t5 = new Date()
sleep(3000)
const t6 = new Date()
console.log(t6 - t5)
// promise 实现
function sleep (slTime) {
return new Promise(resolve =>{
setTimeout(resolve,slTime)
})
}
const t1 = new Date();
sleep(3000).then(()=>{
const t2 = new Date();
console.log(t2-t1);
})
// async,await实现
function sleep (slTime) {
return new Promise(resolve =>{
setTimeout(resolve,slTime)
})
}
(async function test(){
const t1 = new Date();
await sleep(3000)
const t2 = new Date();
console.log(t2 - t1);
}())
</script> |
function sleep (t = 1000) {
console.log('>>> sleep start');
let startTime = +(new Date());
let curTime = startTime;
while (true) {
curTime = +(new Date());
if (curTime - startTime >= t) break;
}
console.log('>>> sleep finish');
} |
function sleep(timeout) {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), timeout);
})
}
// test
async function test() {
console.log('start');
await sleep(5000);
console.log('end');
}
test() |
function sleep(delay) { |
No description provided.
The text was updated successfully, but these errors were encountered: