Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 对于Ember.js.then函数是否始终有回调?_Javascript_Ember.js - Fatal编程技术网

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()
    });