javascript - 为什么我不能直接在SetTimeout函数中调用resolve()来处理Promises

标签 javascript node.js async-await settimeout resolve

我有两个版本的 sleep 函数,一个正在等待解析,另一个则不等待:

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 可以将函数的调用延迟给定的时间。 solve() 不是一个函数吗? 我找到了这篇文章JavaScript promise resolving with setTimeout这正是我在这里要问的,除了我使用的是异步等待。我也没有得到解释。有人可以向我解释一下为什么会这样吗?

最佳答案

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

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

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

这意味着“立即调用 resolve('done') 并将其结果传递给 settimeout”。从resolve返回的值是undefined,所以undefined被传入setTimeout。因此 setTimeout 没有在 3 秒后运行的函数。

关于javascript - 为什么我不能直接在SetTimeout函数中调用resolve()来处理Promises,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60400243/

相关文章:

javascript - 变量赋值或 if/else 不起作用

javascript - 将 JSON 从 PHP 发送到 JS

node.js - 从 ColumnSet 访问源对象

javascript - 如何通过与其他对象比较来修改和替换对象的键?

javascript - NodeJS 中的异步函数返回未定义

javascript - 快速调用中的异步等待

javascript - 如何为 html 文本区域内的选定文本设置 readOnly 属性

javascript - 使用可选的链接运算符进行对象属性访问

ios - 如何从 Node js 发送 voip 推送通知?我可以从 curl 发送 voip 推送,但不能从 Node 发送

c# - 为什么这个等待让我永远等待?