在我的Ember RSVP代码中,即使我发现我的“拒绝”错误,我也无法调用任何错误处理程序。功能正在成功执行。代码:
var promise = new Promise(function(resolve, reject) {
doStuff().then(function() {
resolve(1);
}, function() {
console.log('rejected!');
reject('This has been rejected!');
});
});
var allPromises = [promise]; // Real code has more than one; just one for demonstration.
Ember.RSVP.all(allPromises)
.then(
function() {
console.log('I am called!');
},
function() { console.log('I am never called!');})
.catch(function(err) {
console.log('I am never called, either.');
});
但是,我做看到被拒绝了!'控制台中的消息。我在这做错了什么?因为reject()工作正常,所以catch()不应该开火吗?
DEBUG:Ember:1.9.0-beta.1
DEBUG:Ember数据:1.0.0-beta.12
DEBUG:jQuery:1.9.1
文档:https://github.com/tildeio/rsvp.js
他们声明'有时你可能想要同时处理许多承诺。如果将一组promises传递给all()方法,它将返回一个新的promise,当数组中的所有promise都已满足时,它将被实现;如果数组中的任何承诺被拒绝,则或立即拒绝。'
答案 0 :(得分:0)
您正在捕获onReject
处理程序中的错误。如果您希望catch
运行,则必须提供onReject
处理程序或在拒绝处理程序中抛出错误:
var promise = new Promise(function(resolve, reject) {
reject("")
});
var allPromises = [promise];
// Alt 1 - Dont supply a onRejected handler
Ember.RSVP.all(allPromises)
.then(function() {
console.log('I am called!');
}).catch(function(err) {
console.log('I am never called, either.');
});
// Alt 2 - Throw error in onRejected handler
Ember.RSVP.all(allPromises)
.then(function() {
console.log('I am called!');
}, function () {
console.log('I am never called!');
throw new Error("boom");
}).catch(function(err) {
console.log('I am never called, either.');
});
Alt 1将打印:
我也没有被打过电话。
Alt 2将打印:
我从来没有打过电话!
我也没有被打过电话。