3 回答

TA貢獻1936條經驗 獲得超7個贊
更新:在第 3 種情況下,您可以await使用async函數。
(async () => {
await wait(5000);
// Do something after 5 sec
})();
您的代碼沒有任何問題。所以我不確定你的問題是什么。
不管怎樣,你可以這樣理解Promise:
new Promise(resolve => {
setTimeout(() => {
resolve();
}, 5000);
}).then(() => {
// Do something after 5 sec
});
相當于
setTimeout(() => {
// Do something after 5 sec
}, 5000);

TA貢獻1909條經驗 獲得超7個贊
第一種情況。
1.異步執行,doSomething()不等待sleep函數完成執行。
2. 承諾將保持掛起狀態。
sleep(5000);
doSomething();// execution starts without waiting for 5 seconds.
第二種情況:
1.Promise 已解決,then()/catch()偵聽器被調用。
2.doSomething()執行sleep()完成后執行。
sleep(5000).then(() => {doSomething();// execution starts after waiting for 5 seconds. })
第三種情況:
1. Async 函數返回一個promise。
2. 等待/然后 - 以相同的方式工作(解決/拒絕承諾并返回數據/錯誤)。
3. Await 只能在 async 函數內部使用。
我建議您只創建一個包含 api 業務邏輯的異步函數。
async function wait(sleepTime) {
// some code
await sleep(sleepTime); // waiting
doSomething(); // execution starts only after waiting.
// some other code
}
調用waitwithoutthen將導致掛起的承諾,但這不會影響您的業務邏輯。
// sample example.
wait(5000).then(()=>{res.send("ok");}).catch(e=>{res.send("err")});
添加回答
舉報