2015-09-29 7 views
7

EmberのPromiseProxyMixinをAJAXデータコールとEmber RSVP約束と共に使用しています。現在Ember.PromiseProxyMixinを使用しているときに拒否された約束をバブルアップする方法

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

、約束が拒否された場合、拒否された約束を次のようにむしろ各ルート/テンプレートでエラー処理を組み込むことよりも、私は、アプリケーションのルートでエラーハンドラにバブル拒否約束アップをしたいと思いますPromiseProxyMixinがpromiseの.fail()関数にアタッチし、さらにバブリングを防止するために、これがありますか?

可能ですか? PromiseProxyMixinを使用し、拒否された約束をアプリケーションルートにバブルアップさせることができますか?

+2

それが依存:我々はまた、以下のwhen方法を使用して他の「thennables」を変換します他の機能を使用すると、ルートエラーアクションでエラーは発生しません。これは特に、トランジションとルーティングによって使用されます。このページにあるメカニズム(http://guides.emberjs.com/v1.10.0/understanding-ember/debugging/)によって、他のアプリケーションエラー/ Promiseエラーに接続することができます。副作用として、プロミスプロキシは遭遇した場合でも例外をスローします。 – Kingpin2k

+0

私はそれがちょうど理由だと信じています - RouteのモデルでいくつかのPromiseProxyMixinsを作成しますが、いくつかのリクエストがあり、完了したらすぐに各結果を表示したいので、モデル関数からPromiseProxyMixinsのマップを返しますモデル関数は直ちに戻ります)、{{#if model.somePromise.isPending}}を使用してそれに応じてテンプレートの各部分を更新します。私はそれがとにかくやらなければならない方法だと思います!リンクをチェックします。ありがとう! – Jon

答えて

3

私はあなたの問題を解決することはできませんが、Es6の約束とjQueryの約束に遭遇したので、デフォルトで次のイニシャライザを使ってすべてのjQuery約束をEs6に変換します。あなたはルーティングの一部として、および計算された財産の一部または一部としてそれを使用していない場合は、約束のプロキシを使用しているところ

 

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; 
 
+0

ポストに感謝します。私は既にRSVPの約束に変えるために同様のアプローチをとっているので、問題を引き起こす何かがあると思います。 – Jon

関連する問題