使用异步/等待链接两个promise

时间:2020-06-19 21:18:19

标签: typescript asynchronous promise async-await chaining

假设我具有需要链接两个诺言的功能

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()
  ...
}

1 个答案:

答案 0 :(得分:1)

您只需要删除一个返回诺言的表达式。 fetch返回一个Promise,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()使用then()方法返回一个承诺。并且then()在这里将返回一个承诺,该承诺将在解析JSON内容时解决。