等待多个非嵌套的回调

时间:2018-07-11 12:48:30

标签: javascript asynchronous callback coding-style

说我有两个(或多个)异步操作op1op2,它们在完成时调用回调函数。如何最好在启动op3之前都等待两者完成?
不能将它们彼此嵌套(即首先在op1内启动op2,然后再在op1callback()内启动function op1callback { } function op2callback { } function op3 { ... }
(我当然也不知道首先要完成哪些操作,但是我猜那并不重要)

IE.Navigate "http://Mysite/Home/"
While IE.Busy Or IE.readyState < 4: DoEvents: Wend
IE.Document.getElementsByClassName("tbi")(1).Click

1 个答案:

答案 0 :(得分:1)

最简单的方法是保留有关回调状态的标志:

let count = 0;

function callback() {
  if(++count === 2) op3();
}

op1(callback); op2(callback);

但是从长远来看,让操作返回承诺是有益的,例如:

 async function op1() { 
   // Do some async stuff and *await* that
   return "something";
 }

那么您可以做:

 Promise.all(op1(), op2()).then(op3);