2016-05-12 9 views
0

den folgenden Pseudo-Code vor:Angular - konvertiert eine Funktion in ein Versprechen

// main 
function1(); 
function2(); 

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

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

Was kann ich tun, um sicherzustellen, dass der Rest des Codes nicht, bis beide function1 ausgeführt wird und function2 durch ihre Rückrufe zu bekommen?

Dank

+4

Wenn Sie auf mehrere Versprechen warten möchten - verwenden Sie $ q.all –

Antwort

1

Die .then Methode eines Versprechens gibt immer eine abgeleitete Versprechen. Verwenden Sie diese abgeleiteten Versprechen, um die Ausführung nachfolgender Funktionen zu verzögern.

// 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 
}); 

Der $q Service wird für den erfolgreichen Abschluss von callback1 warten und callback2, bevor Sie den Code in der onFulfilled Funktion aufgerufen wird. Andernfalls ruft der Service $q die Funktion onRejected für das erste abgelehnte Versprechen auf.

+0

Liebe die Idee, aber meine Tests funktionieren nicht auf diese Weise. Ich komme zu "// code placed here" bevor calback2 fertig ist. Außerdem rufe ich Service-Funktionen nicht direkt an. Sie werden in function1 und finction2 aufgerufen. A, ich verstehe. Finction1 und Function2 müssen diese Serviceaufrufe zurückgeben. – Mark

+1

Wenn Funktionen in anderen Funktionen (oder Serviceaufrufen) * verschachtelt sind, sollten auf jeder Hierarchieebene 'return'-Anweisungen vorhanden sein. – georgeawg