代码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内解决吗
在语法中使用括号(请参阅:resolve(someValue))意味着函数调用。因此,您正在运行resolve函数,并将结果作为回调传递给setTimeout()函数。
如果您想在超时后解析,最好的方法是传递一个匿名函数,该函数使用您想要的值运行解析函数(如第一个示例所示)。你可以这样缩短它:
setTimeout(() => resolve("Hello World"), 10000);
如果您的函数仅由单个语句组成,则匿名函数可以简单地获得不带大括号的返回值。