解决承诺的两种方式之间的区别

Difference between two ways of resolving a promise

我想了解这两个代码片段之间的区别,它们都以不同的方式解决承诺但收到相同的结果(一秒钟后解决)。

哪种方法正确?

function longTask(){
    return new Promise((resolve, reject) =>
    setTimeout(() => resolve(), 1000)
)}

longTask().then(() => console.log("done"));

function longTask(){
    return new Promise((resolve, reject) =>
    setTimeout(resolve, 1000)
)}

longTask().then(() => console.log("done"));

两者在技术上是相同的。

第一个解决方案运行一个调用 resolve.

的匿名函数

第二个解决方案获得对 resolve 函数的引用,该函数最终也会被调用。

在这种情况下,如果您不使用值进行解析,则没有区别。在需要使用值解决承诺的情况下,您可能希望使用第一个示例,以便控制传递给 resolve 函数的内容。

function longTask(){
    return new Promise((resolve, reject) =>
    setTimeout(() => resolve(someResolvedValue), 1000)
)}

longTask().then(() => console.log("done"));

编辑:或者您可以使用第二个示例并将解析值作为第三个参数传递给 setTimeout。感谢 VLAZ 指出这一点。

function longTask(){
    return new Promise((resolve, reject) =>
    setTimeout(resolve, 1000, someResolvedValue)
)}

longTask().then(() => console.log("done"));