是否有办法仅在完成 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/