Как я могу получить этот асинхронный результат перед остальной частью кода?

#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 .. это то, к чему я стремился в основном..