使用 async/await 链接两个 promise

Chaining two promises using async/await

假设我有这个函数需要链接两个 promise

async function getPosts() {
  let p1 = await fetch(...)
  let p2 = await fetch(...)
  let post1 = await (await p1).json()
  let post2 = await (await p2).json()
  ...
}

我是否需要使用双 await 才能将完成的结果输入 post1 还是多余?

async function getPosts() {
  let p1 = await fetch(...)
  let p2 = await fetch(...)
  let post1 = await (p1).json()
  let post2 = await (p2).json()
  ...
}

您只需去掉表示return承诺的表达式即可。 fetch return 是一个承诺,json() 方法也是如此。

async function getPosts() {
  let p1 = await fetch(...)
  // fetch() returns a promise, `await p1` unwraps that promise.

  let post1 = await p1.json()
  // p1 is a fetch response, just await the `json()` method.
}

但是,您可以通过混合使用 promise 回调和 await 语法来变得更简洁:

let post1 = await fetch(...).then(res => res.json())

这里 fetch() return 是一个带有 then() 方法的承诺。 then() 这里将 return 一个在 JSON 内容被解析时解析的承诺。