Search code examples
javascriptpromisedojodeferred

Ensure a set of deferred.then callbacks completes


I am using Dojo 1.10 by the way which came with Deferred and Promise API. So the scenario is as below:

 var deferred_1 = new Deferred();
 deferred_1 .then(function(value){
  // do something
  return something;
 })

 var deferred_2 = new Deferred();
 deferred_2.then(function(value){
  // do something
  return something;
 })

var completeFunc = function(value){
    console.log("done");
}

//run completeFunc after completion of both deferred_1.then and 
deferred_2.then

How do I ensure the completion of both deferred objects callback functions in deferred_1.then and deferred_2.then are completed before running another function.


Solution

  • Use Promise.all to create a Promise that resolves only after all promises you pass into it are resolved. Note that you have to save a reference to the new promises:

    const deferred_1 = new Deferred();
    const d1 = deferred_1.then(function(value) {
      // do something
      return something;
    });
    const deferred_2 = new Deferred();
    const d2 = deferred_2.then(function(value) {
      // do something
      return something;
    })
    const completeFunc = function(value) {
      console.log("done");
    }
    Promise.all([d1, d2]).then(completeFunc);