Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Wait until promise and nested thens are complete

I'm returning a promise from a function like this:

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;

Let's say the above function is called save.

In the calling function I want to do wait for the entire chain to complete and then do something. My code there looks like this:

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

The result is that 'aftersave' is send to the console while the chain of promises is still running.

How can I do something after the whole chain is complete?

like image 602
RolandG Avatar asked Jan 05 '13 15:01

RolandG


1 Answers

Instead of nesting the promises, chain them.

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;
like image 168
Raymond Chen Avatar answered Nov 05 '22 18:11

Raymond Chen