如何在 vanilla JS 中编写 async/await

apc*_*ang 4 javascript promise async-await

MDN 文档中,它说

async function foo() { 
    await 1
}
Run Code Online (Sandbox Code Playgroud)

相当于:

function foo() {
    return Promise.resolve(1).then(() => undefined)
}
Run Code Online (Sandbox Code Playgroud)

那么相当于什么

async function foo() {
    await genPromise();
}
Run Code Online (Sandbox Code Playgroud)

假设 genPromise() 返回另一个 Promise。

可不可能是

function foo() {
    return Promise.resolve(new Promise((resolve, reject) => {})).then(() => undefined)
}
Run Code Online (Sandbox Code Playgroud)

Nic*_*wer 5

那么相当于什么

async function foo() {
   await genPromise();
}
Run Code Online (Sandbox Code Playgroud)

该代码将等待 genPromise 返回的 Promise 解析,然后将其自己的 Promise 解析为undefined. 所以等价的是:

function foo() {
  return genPromise().then(() => undefined);
}
Run Code Online (Sandbox Code Playgroud)

  • 如果 genPromise 不会返回承诺,你需要一个 Promise.resolve(...) 围绕它 (4认同)