为什么我不能直接在 SetTimeout 函数中为 Promises 调用 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() 不是函数吗? 我发现这个 post 这正是我在这里要问的,除了我使用的是异步等待。我也没有得到解释。有人可以向我解释为什么会这样吗?

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

这意味着 "create a function with the text () => resolve('done') and pass it into setTimeout"。 setTimeout 将等待指定的时间,然后调用该函数。

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

这意味着 "immediately call resolve('done') and pass its result into settimeout"。来自 resolve 的 return 值为 undefined,因此未定义被传递到 setTimeout。因此 setTimeout 没有函数到 运行 3 秒后。