一个承诺的多个等待的解决顺序

Ale*_*lec 4 javascript node.js promise

如果多个任务正在等待一个 Promise,那么一旦 Promise 得到解决,是否有一个标准顺序保证/指定这些任务将开始执行?例如,考虑以下情况

var promise = null;
function setPromiseIfNeeded() {
  if (!promise) {
    promise = new Promise(resolve => setTimeout(resolve, 100));
  }
}
client.on('event1', event => {
  setPromiseIfNeeded();
  await promise;
  console.log('event 1 done awaiting');
}
client.on('event2', event => {
  setPromiseIfNeeded();
  await promise;
  console.log('event 2 done awaiting');
}
Run Code Online (Sandbox Code Playgroud)

如果event1发生在之前event2,是否可以保证处理程序 forevent1会在处理程序 for 之前从其承诺中唤醒event2

如果行为依赖于实现,我对 Node.js v12 及更高版本的行为特别好奇。

Ber*_*rgi 6

是的,这是有保证的。Promise 处理程序(then回调)按照它们在 Promise(调用)上安装的顺序运行.then()。这转化为相同的await语法。