javascript - 当所有事件完成时调用函数 Javascript

标签 javascript asynchronous

是否有办法仅在完成 ​​2 个以上不同性质的异步事件后才运行函数?

例如,您使用 ajax 请求文件,并向网络 worker 发布消息。当这两个调用函数都收到响应后,您将继续下一步。

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

// 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

  }
}

有没有更好的方法来处理这个问题?

最佳答案

这正是Promise.all()是为了做。您可以将多个 Promise 传递给 .all()并且您将收到一个 promise ,一旦所有传入的 promise 都得到解决,该 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"]

关于javascript - 当所有事件完成时调用函数 Javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51937908/

相关文章:

javascript - 如果在 onRowSelection 中使用 setState,则响应 : Material-ui tableRow can not choose,

javascript - 如何通过值获取 JavaScript 'Map' 中的键?

c# - 多个异步 SqlClient 操作 - 寻找一个很好的例子

c - 使用 C 的套接字和线程

flutter - 在未来的异步调用中,我需要一些指导,包括 flutter 和 Dart ,有时情况会发生困惑

javascript - 在三元运算符内不执行任何操作

javascript - 检测没有滚动条的页面上的滚动

random - JavaScript 中的可播种随机数生成器

c# - 具有同步和异步调用者的同步方法中的 Thread.Sleep 或 Task.Delay

ios - 从相机胶卷异步获取所有图像