7

我将 Ember 的 PromiseProxyMixin 与 AJAX 数据调用和 Ember RSVP Promises 一起使用。我不想在每个路由/模板中加入错误处理,而是将一个被拒绝的承诺冒泡到 Application 路由中的错误处理程序,如下所示:

export default Ember.Route.extend({
    actions: {
        error: function(error, transition) {
            return this.transitionTo('error');
            return false;
        }
    }
});

目前,如果一个 Promise 被拒绝,被拒绝的 Promise 不会冒泡到 Application 路由(这是因为 PromiseProxyMixin 附加到一个 Promise 的 .fail() 函数并防止进一步冒泡吗?如果是这样,有没有办法继续冒泡?)

是否可以使用 PromiseProxyMixin 并允许被拒绝的承诺冒泡到 Application 路由?

4

1 回答 1

3

我不确定它是否能解决您的问题,但我们确实遇到了 Es6 承诺和 jQuery 承诺的差异,因此我们默认使用以下初始化程序将所有 jQuery 承诺转换为 Es6。我们还使用以下方法转换其他“thennables” when


import Ember from 'ember';

function initialize() {
  var $ajax = Ember.$.ajax;
  Ember.RSVP.when = function(promise, label) {
    return new Ember.RSVP.Promise(promise.then.bind(promise), label);
  };
  return Ember.$.ajax = function() {
    return Ember.RSVP.when($ajax.apply(Ember.$, arguments), '$.ajax');
  };
};

var PromiseAdapterInitializer = {
  name: 'promise-adapter',
  initialize: initialize
};

export {initialize};
export default PromiseAdapterInitializer;

于 2015-09-29T13:45:37.177 回答