2017-03-13 13 views
0

最近1.5から1.6.3に更新され、$ qサービスを使用して遅延プロミスオブジェクトを使用しているコードがあります。ユニットテストが実行されます。ここでは

Possibly unhandled rejection: undefined thrown 

は繰延約束を使用して、私は自分のコードを持っている機能の典型的な構造である:

public someFunction =() => { 
    const deferred = this.$q.defer(); 
    if (someConditionIsTrue) { 
     this.myService.getThings().then((response) => { 
      deferred.resolve(response); 
     }); 
    } else { 
     deferred.reject(); 
    } 
    return deferred.promise; 
}; 

私がスローされた、このエラーを取得し、他の条件をテストするユニット(使用カルマ\ジャスミン\ファントムJ)

私はすでに次のようにも設定されています:

config(['$qProvider', ($qProvider) => { 
     $qProvider.errorOnUnhandledRejections(false); 
     }]) 

誰かが正しい方向に私を指すことができますしてください?角度は、約束のすべての可能なルートを処理するためにあなたを示唆している

+0

'deferred.reject()'のように 'deferred.reject(false)'のような引数を渡すことができますか? – codtex

+0

私はあなたの提案を試みたが、以前は 'おそらく未処理の拒否:false throwそれは 'unde投げられた罰金」 – mindparse

+1

はい、もちろん、今私は理解しています。 'somePromise.then(function(){/ * thisは解決関数* /}、function(){/ *これは関数を拒否する* /}はあなたの拒否を処理する関数を持っていないので、 }) '。これが理由であり、私が答えを投稿できるかどうか教えてください – codtex

答えて

0

感謝。

現在、あなたはこの部分が欠落しています

public someFunction =() => { 
    const deferred = this.$q.defer(); 
    if (someConditionIsTrue) { 
     this.myService.getThings().then((response) => { 
      deferred.resolve(response); 
     }); 
     // what happen if this promise is rejected? 
    } else { 
     deferred.reject(); 
    } 
    return deferred.promise; 
}; 

あなたがコメントした部分に.catchを追加することができますが、私はクリーンなコードと簡単にメンテナンスのため、このような全体の構造を変更することをお勧め:

public someFunction =() => { 
    if (someConditionIsTrue) { 
     return this.myService.getThings(); 
     // this will pass back whatever resolve/reject to upper layer 
    } else { 
     return $q.reject(); 
    } 
}; 
関連する問題