#javascript #async-await
#javascript #асинхронный-ожидание
Вопрос:
Я много читал об асинхронности и обещании, и у меня просто не укладывается это в голове.
проще говоря:
let test = 50;
check(array).then(x => console.log("this goes first",x));
console.log(test);
моя асинхронная функция в другом классе:
async check(array) {
let b;
for (let word of array)
b = (await check(word)) ? 0 : 1; //if true =0 , false =1
if (oneElemInArrayisFalse === 1) {
break;
}
}
return b;
}
мой вывод:
50
"this goes first:"(1 or 0)
а не наоборот — наоборот…
Комментарии:
1. В чем вопрос?
2. Я хотел бы знать, как распечатать повторный запуск асинхронной функции, а затем продолжить работу с остальной частью кода. В этом случае
console.log(test)
3. Вам нужно переместить это
console.log(test);
либо внутриthen
обратного вызова, либо послеawait
. Обойти это невозможно.
Ответ №1:
Вы можете связать их:
let test = 50;
check(array)
.then(x => console.log("this goes first",x))
.then(() => console.log(test));
Комментарии:
1. это то, что я пытался сделать здесь:
check(array).then(x => console.log("this goes first",x));
2. Вы не должны связывать
then
вызовы, если первый обратный вызов не возвращает обещание. Второй обратный вызов также не получитx
аргумент.
Ответ №2:
Когда вы помещаете логику в «then», ваш код продолжается, и всякий раз, когда возвращается обещание, произойдет then (например, функция обратного вызова).. вы могли бы ожидать, как это (вам нужно, чтобы вызывающая функция была асинхронной):
let test = 50;
let x = await check(array);
console.log("this goes first",x);
console.log(test);
Где журнал будет происходить, конечно, по порядку, но что может показать вам, что это работает, так это то, что x будет возвращен, а не undefined
..
Если вы не можете сделать вызывающую функцию асинхронной, вы можете просто поместить все, что должно произойти после проверки, в then
..
let test = 50;
check(array).then(x => {
console.log("this goes first",x);
console.log(test);
);
Поскольку вы хотите, чтобы остальная часть кода выполнялась синхронно, вам не нужно, чтобы они выполнялись в разных местах..
обратите внимание, что что-либо после then
не будет выполняться синхронно и может произойти до возврата функции проверки
Комментарии:
1. Вы забыли упомянуть, что
await
это можно использовать только вasync
функциях2. Я не могу этого сделать, потому что await должен быть в асинхронном методе: (
3. Я подумал, что вы могли бы изменить вызывающий метод на асинхронный, я отредактировал свой ответ.. но обратите внимание на объяснение о then .. это то, к чему я стремился в основном..