我用 RSVP 包装了一个简单的 jQuery 承诺,并注意到当我故意导致错误时,永远不会调用失败回调。我认为这是因为当您使用 vanilla jQuery 并且回调抛出错误时,返回的 Promise 不会移动到失败状态(与规范相反)。
如果我需要使用 jQuery $.ajax 但我想通过 RSVP 获得真正的解决/拒绝回调,我可以对下面的示例做什么(如果有的话)?
var peoplePromise = new Ember.RSVP.Promise(function(resolve, reject) {
$.getJSON('/api/people/', resolve).fail(reject).error(reject);
});
var catPromise = new Ember.RSVP.Promise(function(resolve, reject) {
$.getJSON('/api/cats/', resolve).fail(reject).error(reject);
});
Ember.RSVP.all([peoplePromise, catPromise]).then(function(things) {
things[0].forEach(function(hash) {
var thing = App.Person.create(hash);
Ember.run(self.people, self.people.pushObject, thing);
});
things[1].forEach(function(hash) {
var wat = hash.toJSON(); //this blows up
var thing = App.Person.create(hash);
Ember.run(self.people, self.people.pushObject, thing);
});
}, function(value) {
alert(value.status + ": promise failed " + value.responseText);
});