Возврат происходит до завершения выполнения цикла

#node.js #express #async-await

#node.js #выразить #асинхронный-ожидание

Вопрос:

Я использую цикл for, и возврат происходит до завершения выполнения цикла. Я не могу использовать.Метод Map, потому что у меня есть некоторые промежуточные условия, и я хочу разорвать промежуточный цикл.

  const getCompanies = async(searchURL,reqBody) => {
    const html = await rp(baseURL   searchURL);
    businessMap = cheerio('a.business-name', html);
      for(var i=0; i < businessMap.length; i  ) {
        linkNew =  baseURL   businessMap[i].attribs.href;
        const innerHtml = await rp(linkNew);
        ..
        ...My Code with conditions here 
        .....
        ......
        ......
        values.push( [a,b,c,d,e,f]);
        
        
      }
     return values

}
  

Комментарии:

1. Мой ответ помог вам решить проблему? если это так, пожалуйста, отметьте его как принятый, отметив V слева от него. Если нет, пожалуйста, дайте мне знать, и я постараюсь вам помочь.

2. Нет, это не помогло, извините

3. пожалуйста, добавьте весь код (где он говорит My Code with conditions here ), чтобы мы могли вам помочь.

Ответ №1:

Я вижу здесь 2 варианта:

  1. У вас есть a break , который выполняется там, где указано My code with conditions here .
  2. rp не возвращает a Promise .

Что касается второго варианта, вот краткий код, чтобы показать вам, что последняя строка асинхронной функции выполняется только тогда, когда все await s завершены:

 const delay = (ms) => {
   return new Promise(r => {
      setTimeout(r, ms);
      console.log("delayed", ms);
   });
}
const run = async () => {
   for (var i = 0; i < 3; i  ) {
       await delay(1000);
   }
   console.log("finished");
}
run();