亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Node js 中使用 setTimout() 作為 Promise

在 Node js 中使用 setTimout() 作為 Promise

喵喔喔 2021-11-18 16:56:03
我是 JS 新手,我正在 Node.js 中為我的應用程序編寫一些簡單的 REST API。在代碼中的某個地方,我想等待大約 5 秒鐘。我對使用 Promise 和正常超時方法感到困惑,并在其他地方調用該函數。如下:const sleep = (time) => {    return new Promise(resolve => {        setTimeout(() => {            resolve()            console.log('5 seconds');        }, time);    })}然后調用函數:sleep(5000)或者const sleep = (time) => {    return new Promise(resolve => {        setTimeout(() => {           resolve()           console.log('5 seconds');       }, time);    })}然后調用函數:sleep(5000).then(() => console.log('5 seconds passed'))或者const sleep = (time) => {    return new Promise(resolve => {        setTimeout(() => {            resolve()            console.log('5 seconds');        }, time);    })}async function wait(sleepTime) {    await sleep(sleepTime)}然后調用函數:wait(5000)難道我做錯了什么?因為在所有 3 種情況下,我實際上得到了 5 秒的等待時間,但是由于函數返回 Promise,我必須使用.then()If I want to use the Promise。
查看完整描述

3 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

然后當你想獲得 promise 的結果時使用,即使不使用它的結果,promise 的代碼仍然可以工作


查看完整回答
反對 回復 2021-11-18
?
LEATH

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);


查看完整回答
反對 回復 2021-11-18
?
jeck貓

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")});


查看完整回答
反對 回復 2021-11-18
  • 3 回答
  • 0 關注
  • 185 瀏覽
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號