转换被拒绝的承诺中的值
Transform values in a rejected promise
假设我有一个被拒绝的承诺:
var promise = new Promise(function(resolve, reject) {
reject({error_message: "Foo"});
});
我想转换这个承诺(在这种情况下:提取错误消息):
var new_promise = promise.then(function(response) {
return response.id;
}, function(error) {
return error.error_message;
});
当我再次履行承诺时:
new_promise.then(function(id) {
console.log("Object created: "+id);
}, function(message) {
console.log("Error: "+message);
});
我会一直在控制台上获得Object created: Foo
。这种转变似乎将被拒绝的承诺变成了坚定的承诺。
有没有一种方法可以转换一个被拒绝的承诺,这样结果就是另一个被拒绝的承诺?
假设我有一个被拒绝的承诺:
var promise = new Promise(function(resolve, reject) { reject({error_message: "Foo"}); });
请注意,这应该读作var promise = Promise.reject({error_message: "Foo"});
——这里不需要涉及复杂的构造函数。
我想改变的承诺
具体来说,您希望映射promise的错误状态。不幸的是,在标准promise上没有这样的方法(例如mapError
)。你在你的代码中做了什么
var new_promise = promise.then(…, function(error) { return error.error_message; });
实际上是为错误设置处理程序,而不是转换。您"捕获"错误,然后返回一个新的结果-另请参阅此控制流程图。
有没有一种方法可以转换一个被拒绝的承诺,这样结果就是另一个被拒的承诺?
是的,你需要得到拒绝作为你的处理者的结果。你可以通过
.then(…, function(error) {
return Promise.reject(error.error_message);
})
或通过
.then(…, function(error) {
throw error.error_message;
})
(但是,请注意,不拒绝带有实际Error
对象的承诺是不可取的)
而不是:
return error.error_message;
你可以使用:
throw error.error_message;
相关文章:
- 如何将嵌套设置超时转换为承诺
- 如何重构“;回调金字塔”;转换为基于承诺的版本
- 转换嵌套'对于'循环成一个承诺,为了一个承诺?嵌套承诺
- 使用 jQuery 承诺等待转换
- 将 for 循环转换为 Q 承诺
- 将元素数组转换为承诺并将其返回
- 可观察 - 将 2 个承诺转换为可观察
- 实现时,将承诺数组转换为值数组
- 转换被拒绝的承诺中的值
- Node.js:使用Bluebird将模块函数从回调转换为承诺
- 将嵌套回调转换为承诺
- Javascript将我的身份验证函数转换为承诺
- 扩展ES6承诺,将回调转换为Deferred模式
- Angular UI-Router——在resolve中返回被拒绝的承诺并不能停止状态转换
- 将承诺的变量转换为正常的单角变量
- 使用when/node将Amazon S3函数转换为承诺时出错
- 将带有回调的方法转换为返回带有清理的承诺的方法
- 如何将被拒绝的承诺转换为异常,并从Express路由处理程序抛出该异常?
- Javascript承诺转换
- 将承诺转换为蓝鸟