RSVP で単純な jQuery promise をラップしていますが、意図的にエラーを発生させた場合、失敗コールバックが呼び出されないことに気付きました。バニラjQueryを使用し、コールバックがエラーをスローすると、返されたプロミスが失敗状態に移行しないためだと思います(仕様の反対)。
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);
});