javascript - 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的输出是“成功”而不是“失败”?
解决方案
在第一种情况下,您正在传递对函数的引用。当你传递一些Promise.resolve()
不是 Promise 的东西时,它会自动返回一个已解决的 Promise。
要在第一种情况下获得预期的输出,请像这样:
Promise.resolve(foo())
- 注意foo()
调用函数 foo 而不是foo
传递引用。
推荐阅读
- javascript - 从平面到嵌套对象递归javascript
- python - 第一个 Flask 单元测试成功,所有后续测试都失败。也许是陈旧的 app_context?
- ios - Swift Firebase 观察 .childAdded 对现有项目而不是新项目做出反应
- c# - 可以转换为有效日期时间的最长字符串是多少?
- f# - F# 使用 FSharp.Data 无法获得 basicAuth 工作
- java - 创建自定义身份提供者并使用 keycloak 对其进行配置
- java - 用户类抛出异常:java.util.MissingFormatWidthException: %-%
- laravel - Laravel Srmklive 贝宝证书问题
- c++ - 通过 C++ 从目录中过滤特定文件类型
- python - 在 ploltly 中显式设置箱线图的颜色