да правильно.
await можно вызвать только внутри async блока.
когда мы используем await отлов ошибки всегда нужно делать в try { ... } catch (e) {}.
любой метод который возвращает промис можно использовать await внутри блока async
и того вы можете комбинировать устаревший код с новым.
(async () => {
async function fetchData1(url) {
try {
let response = await fetch(url); // promise
return await response.json(); // promise
} catch(e) {
return null;
}
}
// на промисах это выглядело бы так, вам все равно нужно вернуть обьект промиса, если вам важно вернуть результат.
function fetchData2(url) {
return new Promise((resolve,reject) => {
fetch(url).then(res => res).then (res => res.json()).then((result) => {
resolve(result); // говорим что наш промис достиг успеха,
}).carch(e => {
resolve(null); // так как мы повторяем логику try catch мы используем пустой ответ. вместо reject(e);
})
})
}
const promises = [
fetchData1('/last-news'),
fetchData2('/last-comments'),
fetchData2('/popular-news'),
];
// (после объявления массива методы уже будут выполнятся, лучше делать через promises.push(...) )
// .. куча логики
// приказываем ожидать если не все выполнялось.
const result = await Promise.all(promises);
console.log({result});
// или так
Promise.all(promises).then( results => {
console.log({result});
})
// a так если мы хотим последовательно и лапшой promise hell
fetchData1('/last-news').then(resultNetws => {
fetchData2('/last-comments').then(lastComments => {
fetchData2('/popular-news'').then(popularNews => {
})
})
});
// рекомендую прочитать про статичные методы у обьекта Promise.all итд.
})());