等待多个非嵌套回调

Wait for multiple non nested callbacks

假设我有两个(或更多)异步操作 op1op2 在完成时调用回调函数。我如何才能最好地等待两者完成后再开始 op3?
不能 能够将它们嵌套在彼此内部(即首先开始 op1,然后在 op1callback() 内部开始 op2
(我当然也不知道哪一个先完成,但我想这并不重要)

function op1callback {
}
function op2callback {
}
function op3 {
...
}

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

let count = 0;

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

op1(callback); op2(callback);

但从长远来看,让操作 return 承诺可能是有益的,例如:

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

那么你可以这样做:

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