Я пытаюсь написать асинхронную функцию, которая выполняет несколько выборок, ждет завершения всех, а затем возвращает результаты JSON в виде массива. Это то, что у меня есть до сих пор:
файл1.js
const searchResults = await Api.search(searchText);
api.js
async function search(searchText) {
return util.executeFetchAll([
`/searchA/${searchText}`,
`/searchB/${searchText}`,
`/searchC/${searchText}`
]);
}
util.js
async function executeFetchAll(urls) {
const promises = urls.map(url => fetch(url));
const responses = await Promise.all(promises);
debugger;
}
Когда выполнение приостанавливается в отладчике и я проверяю responses
с помощью инструментов разработчика Chrome, это правильный массив из 3 объектов Response
, но если я проверяю responses[0].json()
, он странным образом возвращает в консоли объект Promise {<pending>}
.
Что мне не хватает? Я жду Promise.all
, что должно означать, что все промисы разрешаются до моей строки отладчика. Так почему же метод json()
странно показывает объект Promise в состоянии ожидания?
Спасибо.
await Promise.all(...)
. Почему в следующей строке, где мы нажмем отладчик, они все еще будут отображаться как ожидающие? Разве они не должны быть разрешены к моменту завершения строки ожидания? 28.09.2018responses
, но вы используетеresponses
в Promise.all в качестве аргумента. Можете ли вы уточнить в контексте моего примера кода порядок выполнения? Спасибо. 28.09.2018const responses = await Promise.all(promises); const jsonPromises = responses.map(r => r.json()); const objects = await Promise.all(jsonPromises);
28.09.2018objects
в итоге получился:[false, false, false]
. 28.09.2018urls = ['https://jsonplaceholder.typicode.com/todos/1', 'https://jsonplaceholder.typicode.com/todos/1', 'https://jsonplaceholder.typicode.com/todos/1'];
, и он работает. Ваш API возвращает, вероятно, ложь. Используйте вкладку сети консоли разработчика, чтобы увидеть, что вам отправил сервер. 28.09.2018responses
не имеет 3 разрешенных промисов послеawait Promise.all(...)
. Почему они до сих пор находятся на рассмотрении, а мне пришлось быawait
второй раз? 28.09.2018