2016-05-12 81 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服務將等待callback1callback2成功完成在onFulfilled函數調用的代碼之前。否則$q服務將調用onRejected函數來獲得第一個被拒絕的承諾。

+0

喜歡這個想法,但我的測試不是那樣工作的。在calback2完成之前,我正在「//將代碼放置在此處」。另外,我不直接調用服務功能。它們在function1和finction2中調用。 A,我明白了。 Finction1和function2必須返回這些服務調用。 – Mark

+1

當函數在其他函數(或服務調用)中嵌套*時,應該在層次結構的每個級別都有'return'語句。 – georgeawg