簡體   English   中英

為什么我不能直接在 SetTimeout 函數中為 Promise 調用 resolve()

[英]Why can I not call resolve() for Promises in SetTimeout Function directly

我有兩個版本的睡眠功能,一個正在等待解決,另一個不是:

function sleephelper1(ms) {
    return new Promise(function(resolve) {
        setTimeout(() => resolve('done'), ms);
    })
  }

  function sleephelper2(ms) {
    return new Promise(function(resolve) {
        setTimeout(resolve('done'), ms);           
    })
  }

然后我調用 sleephelper1 或 sleephelper2:

async function test(){
var test = await sleephelper1(3000);
console.log(test)
console.log("exit test function")
  }

test()

第一個在解析前等待 3 秒。 但是 sleephelper2 無法正常工作。 代碼立即執行。 我認為 SetTimeout 可以將函數的調用延遲給定的時間。 resolve() 不是函數嗎? 我發現這篇文章使用 setTimeout 解決 JavaScript 承諾,這正是我在這里問的問題,除了我使用的是異步等待。 我也沒有得到解釋。 有人可以向我解釋為什么會這樣嗎?

setTimeout(() => resolve('done'), ms);

這意味着“使用文本() => resolve('done')創建一個函數並將其傳遞給 setTimeout”。 setTimeout 將等待指定的時間量,然后調用該函數。

setTimeout(resolve('done'), ms);

這意味着“立即調用resolve('done')並將其結果傳遞給 settimeout”。 resolve 的返回值是undefined ,所以 undefined 被傳遞到 setTimeout 中。 因此, setTimeout 沒有功能可以在 3 秒后運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM