2016-05-12 78 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