Найдите и объясните баг в JavaScript-асинхронном коде: async function a(){ await b(); c(); } где b возвращает rejected Promise, а c должна выполняться только при успехе — как изменить код корректно

19 Мар в 11:58
16 +1
0
Ответы
1
Баг в том, что при отклонённом промисе `await b()` бросит исключение, либо — если вы заранее «погасили» ошибку через `b().catch(...)` — вы непреднамеренно позволите `c()` выполниться. Правильный способ — явно обрабатывать успех/ошибку.
Вариант с try/catch (выполнить `c()` только при успехе, при ошибке — обработать или пробросить):
```
async function a() {
try {
await b(); // если b отклонится — перейдём в catch и c() не выполнится
c(); // выполняется только при успешном завершении b()
} catch (err) {
// обработка ошибки или
throw err; // пробросить дальше, если нужно
}
}
```
Альтернатива через цепочку промисов:
```
function a() {
return b().then(() => {
c(); // выполнится только при resolve
});
}
```
Важно: не писать `await b().catch(() => {})`, если вы хотите отменить выполнение `c()` при ошибке — такой catch «погасит» ошибку и `c()` выполнится.
19 Мар в 12:07
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир