假设我得到了Ember obj
。在做任何类型的同步与后端存在使用一个承诺链成为了可能:Ember.js .then函数是否总是回调?
obj.save().then(function(res){
// Success callback
}, function(res){
// Fail callback
});
是否有一个做/总是回调与.then()
Ember.js承诺链?
我试着添加第三个参数函数,但它没有帮助。
假设我得到了Ember obj
。在做任何类型的同步与后端存在使用一个承诺链成为了可能:Ember.js .then函数是否总是回调?
obj.save().then(function(res){
// Success callback
}, function(res){
// Fail callback
});
是否有一个做/总是回调与.then()
Ember.js承诺链?
我试着添加第三个参数函数,但它没有帮助。
http://emberjs.com/api/classes/Ember.PromiseProxyMixin.html#method_finally
烬 - >的jQuery
实施例(在路由器):
var self = this;
var modelType = this.store.createRecord('modelType', {/* model attrs */});
modelType.save().then(function(model){
self.transitionTo('model.show', model);
}).catch(function(){
console.log('Failure to Save: ', reason);
}).finally({
self.hideSpinner()
});
不幸的是没有。但是你可以创建自己的修改RSVP.Promise
原型:
Ember.RSVP.Promise.prototype.always = function(func) {
return this.then(func, func);
}
所以,你可以做到以下几点:
// will show success
Ember.RSVP.resolve('success').always(function(msg) {
alert(msg)
})
// will show error
Ember.RSVP.reject('error').always(function(msg) {
alert(msg)
})
我希望它能帮助
灰烬使用RSVP.js库的承诺,和RSVP does not support always
由于不属于Promises/A(+)规范的一部分。
如果你需要它,@wycats暗示following approach:
Ember.RSVP.Promise.prototype.andThen = function(success, error, always) {
return this.then(function(value) {
var ret = success(value);
always(value);
return ret;
}, function(reason) {
var ret = error(reason);
always(reason);
return ret;
});
};
戈尔的解决方案作品,但为灰烬的数据,你必须添加下面还有:
Ember.PromiseProxyMixin.reopen({
andThen: function() {
var promise = this.get('promise');
return promise['andThen'].apply(promise, arguments);
}
});
的原因是DS.Model.save()
函数返回PromiseObject
(参见http://emberjs.com/api/data/classes/DS.PromiseObject.html),它不执行Ember.RSVP.Promise
,而是实现Ember.PromiseProxyMixin
。因此,您必须使该mixin中的andThen
函数可用,以便在保存模型时使用承诺。
这应该被标记为正确的答案。对我很好! – Pedro