为什么我不能直接在SetTimeout函数中为Promises调用resolve()

问题描述 投票:1回答:1

我有两个版本的睡眠功能,一个正在等待解决,另一个则没有:

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()不是函数吗?我发现了这篇文章JavaScript promise resolving with setTimeout,这正是我在这里要问的,例如我正在使用异步等待。我也没有得到解释。有人可以向我解释为什么这会如此吗?

javascript node.js async-await settimeout resolve
1个回答
4
投票
setTimeout(() => resolve('done'), ms);

这意味着“使用文本() => resolve('done')创建一个函数并将其传递给setTimeout”。 setTimeout将等待指定的时间,然后调用该函数。

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

这意味着“立即调用resolve('done'),并将其结果传递给settimeout”。 resolve的返回值为undefined,因此undefined传递给setTimeout。因此,没有设置setTimeout在3秒后运行的功能。

© www.soinside.com 2019 - 2024. All rights reserved.