JavaScript ES6-承诺解析与事件之间是否可能存在竞争状况?

Yov*_*var 5 javascript race-condition es6-promise

是否可以在承诺解析和承诺等待返回之间执行用户代码?

function a () {
  return new Promise(resolve => {
    setTimeout(() => {
      // Between here...
      resolve()
    }, 1000))
  }
}

async function b () {
  await a()
  // ...and here ?
}
Run Code Online (Sandbox Code Playgroud)

规范是否强制要求立即调用Promise回调?我想知道虚拟机是否可以在两点之间处理事件,从而可能产生副作用。

Jam*_*rpe 5

不,它不强制立即调用。 规范在兑现承诺时需要执行多个步骤,其中之一是:

  1. 执行EnqueueJob(“ PromiseJobs”,PromiseResolveThenableJob,“?promise,解决方案,然后是Action”)

请注意,根据承诺的状态,可以采用不同的路线。但是,它们都以EnqueueJob结尾,它表示:

  1. 在由queueName命名的作业队列的后面添加待处理。

因此,任何进一步的执行都将延迟到作业队列的末尾。