2016-05-12 17 views
0

に関数を変換する以下の擬似コードを考えてみましょう:は角 - 約束

// main 
function1(); 
function2(); 

... 
//the rest of the code 
.... 

// function1: 
someservice.getPhone().then(calback1); 
// function2: 
someservice.getAddress().then(calback2); 

私は関数1と機能2の両方が彼らのコールバックを通して取得するまで残りのコードが実行されていないことを確認するために何ができますか?

おかげ

+4

もしあなたがいくつかの約束を待っていれば - $ q.allを使用してください –

答えて

1

約束の.then方法は、常に派生約束を返します。引き出された約束を使用して、後続の機能の実行を遅らせる。

// function1: 
var derivedPromise1 = service.getPhone().then(calback1); 
// function2: 
var derivedPromise2 = someservice.getAddress().then(calback2); 

$q.all([derivedPromise1, derivedPromise2]) 
    .then(function onFulfilled(resultArray) { 
     //code placed here 
}).catch(function onRejected(errorResult) { 
     //error handling code here 
}); 

$qサービスはonFulfilled関数内のコードを呼び出す前にcallback1callback2が正常に完了を待ちます。そうでなければ、$qサービスは、最初に拒否された約束のためにonRejected関数を呼び出します。

+0

アイデアが大好きですが、私のテストはそうした方法では機能しません。 calback2が終了する前に "//ここにコードを配置"しています。さらに、私はサービス機能を直接呼び出すわけでもありません。関数1と関数2で呼び出されます。 A、そうです。 Finction1とfunction2はこれらのサービスコールを返さなければなりません。 – Mark

+1

関数が他の関数(またはサービス呼び出し)で*ネストされている場合、階層の各レベルに 'return'ステートメントが存在するはずです。 – georgeawg