为什么即使在相同的延迟时间后,promise 对象也会在不同的时间解析?

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

截图

代码1:

let p = new Promise((resolve,reject) => {
    setTimeout(() => {console.log("itsdone"); resolve("done");},10000);
});

代码2:

let p = new Promise((resolve,reject) => {
    setTimeout(resolve("done"),10000);
});

尽管提供了相同的 10 秒延迟,为什么两个代码场景中 Promise 对象的 (p) 状态不同? Code1中的promise在10秒后解决,但Code2中它立即解决? 请参阅附图了解输出的差异。

Code2中的promise不是也有望在10s内解决吗

javascript promise
1个回答
0
投票

在语法中使用括号(请参阅:resolve(someValue))意味着函数调用。因此,您正在运行resolve函数,并将结果作为回调传递给setTimeout()函数。

如果您想在超时后解析,最好的方法是传递一个匿名函数,该函数使用您想要的值运行解析函数(如第一个示例所示)。你可以这样缩短它:

setTimeout(() => resolve("Hello World"), 10000);

如果您的函数仅由单个语句组成,则匿名函数可以简单地获得不带大括号的返回值。

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