我试图理解为什么这段代码不符合我的预期:
async function test() {
await setTimeout(() => {
console.log('done')
}, 1000)
console.log('it finished');
}
test();
这首先打印it finished
,然后再打印done
。这段代码不应该在执行console.log('it finished');
之前等待超时完成还是我误解了?
答案 0 :(得分:5)
您只能有用地await
和promise。
setTimeout
返回一个超时ID(一个数字),您可以将其传递给clearTimeout
以将其取消。它没有返回承诺。
您可以将setTimeout
包裹在诺言中……
async function test() {
await new Promise( resolve => setTimeout(() => {
console.log('done');
resolve("done");
}, 1000));
console.log('it finished');
}
test();