Сопоставьте каждый URL с fetch
вызовом и позвоните .json
на fetch
Обещании:
const urls = [
'https://swapi.co/api/people/1',
'https://swapi.co/api/people/2',
'https://swapi.co/api/people/3',
'https://swapi.co/api/people/4'
];
(async () => {
try {
const allResponses = await Promise.all(
urls.map(url => fetch(url).then(res => res.json()))
);
console.log(allResponses[0]);
} catch(e) {
console.log(e);
// handle errors
}
})();
Я бы предпочел ловить вне функции, я думаю, что она выглядит чище и требует меньше отступов:
const urls = [
'https://swapi.co/api/people/1',
'https://swapi.co/api/people/2',
'https://swapi.co/api/people/3',
'https://swapi.co/api/people/4'
];
(async () => {
const allResponses = await Promise.all(
urls.map(url => fetch(url).then(res => res.json()))
);
console.log(allResponses[0]);
// do stuff with allResponses
})()
.catch((e) => {
console.log(e);
// handle errors
});
Если у вас есть только одно место, где вам нужно дождаться разрешения Обещания, вы можете также рассмотреть возможность отказа от функции async
в целом (это выглядело бы еще лучше ИМО):
const urls = [
'https://swapi.co/api/people/1',
'https://swapi.co/api/people/2',
'https://swapi.co/api/people/3',
'https://swapi.co/api/people/4'
];
Promise.all(
urls.map(url => fetch(url).then(res => res.json()))
)
.then((allResponses) => {
console.log(allResponses[0]);
// do stuff with allResponses
})
.catch((e) => {
console.log(e);
// handle errors
});