首页 > 解决方案 > 在循环完成执行之前发生返回

问题描述

我正在使用 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

}

标签: node.jsexpressasync-await

解决方案


我在这里看到 2 个选项:

  1. 你有一个break在它说的地方被执行的My code with conditions here
  2. rp不返回Promise.

至于第二个选项,这里有一个快速代码,向您展示 async 函数的最后一行仅在所有awaits 完成时才会执行:

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();


推荐阅读