为什么成功承诺的链式回调会在成功和失败中执行?

时间:2015-08-09 12:01:42

标签: javascript ember.js ember-data promise rsvp.js

所以我有一个保存Ember Data模型的基本函数,并在失败时运行常见的回调代码然后将承诺返回给调用者,因此调用者可以自己链接其他回调,但不知何故,链式回调来自调用者未按预期执行,成功代码在失败和成功时执行,而失败代码从未执行

以下是常用功能的代码:

// this function returns the model.save() promise to allow chaining of promises on the caller scope.


   function baseCall() {

      return model.save().then(function () {
        //success
      }, function (reason) {
        //failure
        if (reason.errors) {
          model.set('errors', reason.errors);
        }
      });
    }  

这是来电者代码:

baseCall().then(function(post) {
        console.log('super.success');//runs on failure AND success
      }, function() {
        console.log('super.failure');//never runs
      });

1 个答案:

答案 0 :(得分:0)

出于同样的原因,以下代码始终警告“Hello”;

try {
     model.save(); // throws Error
} catch (e) {
    if (reason.errors) {
      model.set('errors', reason.errors);
    }
}
console.log("Hello");

promise错误处理程序,就像同步catch“处理”错误一样。如果您不想将错误标记为已处理 - 请重新抛出它:

 throw reason; // always throw proper `Error`s