解决承诺的两种方式之间的区别
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"));
我想了解这两个代码片段之间的区别,它们都以不同的方式解决承诺但收到相同的结果(一秒钟后解决)。
哪种方法正确?
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"));