完成所有事件后,调用函数

时间:2018-08-20 20:13:48

标签: javascript asynchronous

是否只有在满足2个以上性质不同的异步事件之后才运行函数?

例如,您请求使用ajax的文件,然后向网络工作者发布消息。当这两个调用程序函数都收到响应后,您就可以继续执行下一步。

下面的代码是我可以想到的唯一方法。但是它很难看,并且具有全局变量。我还需要提前知道要等待多少事件,但这在某些情况下可能会限制运行时逻辑。

// define variables that can be referenced by multiple functions
var globalArray = [];
var numberOfAsyncCalls = 2;

// perform an ajax call
  // on finished
  listener(ajaxResponse);

// post message to web worker
  // on response
    listener(webWorkerResponse);

function listener(response){
  globalArray.push(response);
  if(globalArray.length == 2){
    // move on to next function

  }
}

有没有更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:4)

这正是Promise.all()要做的。您可以将多个promise传递到.all()中,并且您将收到一个promise back,一旦所有传入的promise都已解决,它就会解决。来自MDN example

var promise1 = Promise.resolve(3);
var promise2 = 42;
var promise3 = new Promise(function(resolve, reject) {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then(function(values) {
  console.log(values);
});
// expected output: Array [3, 42, "foo"]