Вы не можете выполнить
response = await bff("polls/abc");
response.json();
, потому что функция json()
является асинхронной, точно так же как bff
, и она возвращает обещание, а также должна ожидаться.
Чтобы понять, почему вызов await bff("polls/abc").json()
работает, мы должны проанализировать его. Прежде всего, await
- это не , ожидающий bff("polls/abc")
(который возвращает обещание), а вызов json()
.
Но подождите: если bff()
возвращает обещание почему bff().json()
работает? Разве bff()
не следует ожидать первым?
Строка в документации got
может дать ответ:
Обещание также имеет .text (),. Методы json () и .buffer (), которые возвращают другое полученное обещание для проанализированного тела.
Таким образом, обещание, возвращаемое bff()
, на самом деле не является "истинным" обещанием, но имеет эти три удобные методы, чтобы вы не тоже ожидали bff()
, если вы получаете ответ только как JSON. Но поскольку вы do действительно хотите посмотреть и на сам ответ, вы должны вместо этого сделать следующее:
const promise = bff("polls/abc");
const response = await promise;
const data = await promise.json();
if (response.status === 404) {
...
}
Другой способ, похоже, установить responseType
в " json ", который должен автоматически преобразовывать тело в JSON, так что вам вообще не придется вызывать json()
вручную, и вы можете просто использовать:
const response = await bff("polls/abc", { responseType: 'json' });
if (response.status === 404) {
// use response.body to access the converted json
}