2016-05-12 2 views
0

Рассмотрим следующий псевдокод:Угловое - преобразовать функцию в обещание

// main 
function1(); 
function2(); 

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

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

Что я могу сделать, чтобы гарантировать, что остальная часть кода не исполняется до тех пор, как function1 и function2 получить через их обратных вызовов?

Благодаря

+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 будет ждать успешного завершения callback1 и callback2 перед вызовом кода в функции onFulfilled. В противном случае служба $q вызовет функцию onRejected для первого отклоненного обещания.

+0

Любите идею, но мое тестирование не работает таким образом. Я добираюсь до «// кода, размещенного здесь», до того, как calback2 закончится. Кроме того, я не вызываю функции сервиса напрямую. Они вызываются в функции1 и finction2. Я вижу. Finaction1 и function2 должны возвращать эти служебные вызовы. – Mark

+1

Когда функции * вложены * в другие функции (или вызовы службы), должны быть операторы 'return' на каждом уровне иерархии. – georgeawg

Смежные вопросы