是否只有在满足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
}
}
有没有更好的方法来解决这个问题?
答案 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"]