【问题标题】:Ensure a set of deferred.then callbacks completes确保一组 deferred.then 回调完成
【发布时间】:2018-09-29 09:12:09
【问题描述】:

我正在使用Dojo 1.10 附带Deferred 和Promise API。所以场景如下:

 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

如何确保在运行另一个函数之前完成deferred_1.then 和deferred_2.then 中的两个延迟对象回调函数。

【问题讨论】:

    标签: javascript promise dojo deferred


    【解决方案1】:

    您可以使用 dojo/promise/all 功能。 来自documentation的示例:

    require(["dojo/promise/all"], function(all){
    
      all([promise1, promise2]).then(function(results){
        // results will be an Array
      });
    
      // -- or --
    
      all({
        promise1: promise1,
        promise2: promise2
      }).then(function(results){
        // results will be an Object using the keys "promise1" and "promise2"
      });
    
    });
    

    【讨论】:

      【解决方案2】:

      使用Promise.all 创建一个 Promise,该 Promise 只有在您传递给它的所有 Promise 都已解决后才会解决。请注意,您必须保存对新承诺的引用:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-16
        • 1970-01-01
        相关资源
        最近更新 更多