2013-01-05 9 views
7

Wracam obietnicę z funkcji takich jak to:Poczekaj aż obietnicy i zagnieżdżone thens są kompletne

resultPromise = dgps.utils.save(opportunity, '/api/Opportunity/Save', opportunity.dirtyFlag).then(function() { 

       self.checklist.saveChecklist(opportunity).then(function() { 

        self.competitor.save(opportunity.selectedCompetitor()).then(function ... etc. 
return resultPromise; 

Powiedzmy, że powyższa funkcja nazywa Zapisz.

W funkcji wywołującej chcę poczekać na zakończenie całego łańcucha, a następnie zrobić coś. Mój kod nie wygląda następująco:

var savePromise = self.save(); 
savePromise.then(function() { 
    console.log('aftersave'); 
}); 

Rezultatem jest to, że „aftersave” jest wysyłany do konsoli, podczas gdy łańcuch obietnic jest nadal uruchomiony.

Jak mogę zrobić coś po zakończeniu całego łańcucha?

Odpowiedz

7

Zamiast gniazdowania obietnic, łańcuch je.

resultPromise = dgps.utils.save(opportunity, '/api/Opportunity/Save', opportunity.dirtyFlag).then(function() { 

        return self.checklist.saveChecklist(opportunity); 
       }).then(function() { 

        return self.competitor.save(opportunity.selectedCompetitor()); 
       }).then(function() { 
        // etc 
       }); 

// return a promise which completes when the entire chain completes 
return resultPromise; 
+2

co, jeśli jest tam warunkowe? Czy nie potrzebujesz odroczonego obiektu? – FlavorScape

+0

To nie jest odpowiedź na zadane pytanie. Pytanie brzmiało, jak czekać na zakończenie łańcucha. Po prostu dodawanie kolejnych elementów do łańcucha nie jest rozwiązaniem i często nie działa poprawnie. – MeanEYE

+0

@MeanEYE Poczekaj na zakończenie łańcucha od , wykonując 'then' na łańcuchu. To rozwiązuje problem (choć jak zauważyłeś, nie odpowiada na dosłowne pytanie, ale pytanie dotyczyło naprawdę problemu). –

Powiązane problemy