#javascript #async-await #assert #assertion
#javascript #async-await #утверждать #утверждение
Вопрос:
Обратитесь к функции
async function dq(isOk){
if(isOk) {return "OK";}
else {throw new Error("not OK");}
}
Какое утверждение точно проверяет приведенный выше код:
- console.assert(ожидает dq (true), ‘OK’);
- console.assert(await(dq (true), ‘not OK’));
- console.assert(ожидает dq (true), ‘not OK’);
- console.assert(dq(true), ‘OK’);
для всех 4 вариантов я получаю undefined в консоли разработчика даже для варианта 2, где await() никогда не является функцией.
Комментарии:
1. попробуйте использовать его внутри асинхронной функции
(async () => { console.assert((await dq(true))); })()
Ответ №1:
Если обещание выполняется нормально, то await promise возвращает результат. Но в случае отклонения он выдает ошибку, как если бы в этой строке был оператор throw .
async function f() {
await Promise.reject(new Error("Whoops!"));
}
В реальных ситуациях обещание может занять некоторое время, прежде чем оно будет отклонено. В этом случае будет задержка, прежде чем await выдаст ошибку.
Мы можем перехватить эту ошибку, используя try ..catch , так же, как и обычный throw:
async function f() {
try {
let response = await fetch('http://no-such-url');
} catch(err) {
alert(err); // TypeError: failed to fetch
}
}
f();
Если мы забудем добавить туда .catch , то получим необработанную ошибку promise (видимую в консоли). Мы можем перехватывать такие ошибки, используя глобальный обработчик событий необработанного отклонения.
Ссылка https://javascript.info/async-await .
Комментарии:
1. Привет, Анккит, спасибо за сообщение, я понял вашу точку зрения, но в приведенном выше асинхронном методе dq нет связанного с ним promise, поэтому в этом случае я проверял поведение. Я могу заверить, что 4-й вариант неверен, поскольку он будет срабатывать до асинхронной функции dq