Javascript 对于Ember.js.then函数是否始终有回调?
假设我有一个余烬Javascript 对于Ember.js.then函数是否始终有回调?,javascript,ember.js,Javascript,Ember.js,假设我有一个余烬obj。在与后端进行任何类型的同步时,都有可能使用承诺链: obj.save().then(function(res){ // Success callback }, function(res){ // Fail callback }); 是否有使用.then()的Ember.js承诺链的done/always回调 我尝试添加第三个参数函数,但没有帮助。不幸的是,没有。但您可以创建自己的修改RSVP.Promise原型: Ember.RSVP.Promise.proto
obj
。在与后端进行任何类型的同步时,都有可能使用承诺链:
obj.save().then(function(res){
// Success callback
}, function(res){
// Fail callback
});
是否有使用.then()
的Ember.js承诺链的done/always回调
我尝试添加第三个参数函数,但没有帮助。不幸的是,没有。但您可以创建自己的修改
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)
})
我希望它能有所帮助Ember使用RSVP.js库进行承诺,而RSVP不是承诺/A(+)规范的一部分 如果你需要它,@wycats建议:
gorner的解决方案可行,但对于余烬数据,您还必须添加以下内容:
Ember.PromiseProxyMixin.reopen({
andThen: function() {
var promise = this.get('promise');
return promise['andThen'].apply(promise, arguments);
}
});
原因是,DS.Model.save()
函数返回一个PromiseObject
(请参阅),它不实现Ember.RSVP.Promise
,而是实现Ember.PromiseProxyMixin
。因此,您必须使该mixin中的和功能可用,以便它在保存模型时与承诺一起工作。
余烬->jQuery
.then()->.done()
.catch()->.fail()
.finally()->.always()
示例(在路由器中):
这应标记为正确答案。对我来说太棒了!余烬有一个“最终”方法:
Ember.PromiseProxyMixin.reopen({
andThen: function() {
var promise = this.get('promise');
return promise['andThen'].apply(promise, arguments);
}
});
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()
});