首页 > 解决方案 > Promise.resolve() 函数是如何工作的?在将被拒绝的承诺作为参数传递给 Promise.resolve() 函数时,我得到了两个不同的输出

问题描述

我在 Promise.resolve() 函数的参数中传递了被拒绝的承诺。在第一种情况下,我通过函数 foo() 传递被拒绝的承诺,在第二种情况下,通过在 Promise.resolve() 函数的参数中创建一个新的承诺来传递被拒绝的承诺。

情况1:

function foo(){
 return new Promise((resolve,reject)=>{
  reject("Function foo failed");
 });
}
Promise.resolve(foo)
.then(
()=>{console.log("Success");},
()=>{console.log("Failure");}
);

案例二:

Promise.resolve(
new Promise((resolve,reject)=>{reject("Failure");
})
)
.then(
()=>{console.log("Success");},
()=>{console.log("Failure");}
);

在情况 2 中,输出符合预期,输出为 "Failure" 。但是在案例 1 中,输出是“成功”,但在这种情况下(案例 1)我期待“失败”,也是因为我传递了一个被拒绝的承诺。所以我想问为什么案例1的输出是“成功”而不是“失败”?

标签: javascriptes6-promise

解决方案


在第一种情况下,您正在传递对函数的引用。当你传递一些Promise.resolve()不是 Promise 的东西时,它会自动返回一个已解决的 Promise。

要在第一种情况下获得预期的输出,请像这样:

Promise.resolve(foo())- 注意foo()调用函数 foo 而不是foo传递引用。


推荐阅读