Вы можете думать об async / await больше как о синтаксическом сахаре, который использует обещания.
Если функция async
, это означает, что она всегда возвращает обещание. По этой причине вы можете ожидать только в методе async
- поскольку он всегда остается в цепочке обещаний, он может возвращать вам значение внутри асинхронной функции. Однако, когда вы возвращаете что-то из этой функции, его всегда обещают снова.
То же, что и для обещаний - как только вы окажетесь в цепочке обещаний, вы не сможете получить значение «вне обещания» (как вы можете сохранить его в некоторой глобальной переменной, но вы не можете вернуть значение непосредственно из цепочки - вы можете вернуть только обещание, которое можно разрешить с помощью значения).
Вы можете переписать любую асинхронную функцию, чтобы обещать цепочки и наоборот
Эта функция:
async function run() {
var captcha = await get_captcha();
console.log( ' captcha confirm -> ' + captcha );
}
равно этому:
function run() {
return get_captcha().then(captcha => {
console.log( ' captcha confirm -> ' + captcha );
});
}
Ошибка: вначале капча имеет значение false, поэтому вы отклоняете обещание на if(captcha === false ) reject(captcha );
со значением false и не перехватываете его, которое заканчивается на Uncaught (in promise) false