Объединение двух обещаний с использованием async / await - PullRequest
0 голосов
/ 20 июня 2020

Предположим, у меня есть эта функция, которой нужно связать два обещания

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 Ответ

1 голос
/ 20 июня 2020

Вам нужно только удалить выражение, возвращающее обещание. fetch возвращает обещание, как и метод 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.
}

Но вы можете получить немного чище, смешав обратные вызовы обещаний и await синтаксис:

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

Здесь fetch() возвращает обещание с помощью метода then(). И then() здесь вернет обещание, которое разрешается, когда JSON контент был проанализирован.

...