【问题标题】:Illegal Break Statement NodeJs & Cheerio非法的 Break 语句节点 Js 和 Cheerio
【发布时间】:2021-02-12 05:57:52
【问题描述】:

我正在尝试循环 .map 函数,直到满足条件。一旦满足条件,我想打破循环,但我得到了非法的 break 语句输出。我对node js和cheerio还很陌生。


async function checkproduct() {
    const browser = await puppeteer.launch({headless: false});
       const page = await browser.newPage();
       const page2 = await browser.newPage();

const maxRetryNumber = Infinity; 
let success = false;
await page.goto("https://www.example.com");

for (let retryNumber = 1; retryNumber <= maxRetryNumber; retryNumber++) {
   
  await page.reload();
     const html = await page.content()
        const $ = cheerio.load(html);
       
        const results = $(".c-products__item").map((index,element) => {    
           
        const titleElement = $(element).find(".node--view-mode-search-result");
            
        const title = $(titleElement).attr("gtm-name");
        
   if( title == "abc" ){ 
        
         const urlElement = $(element).find(".product-selected-url");
            
         const url = $(urlElement).attr("href");
         const skuShoe = $(titleElement).attr("data-sku");
     
         console.log(url)
         success = true;
         break;
         return{title,url,skuShoe}
        }   
      
      }).get();
    
      return results;
    }
}


checkproduct();

【问题讨论】:

  • 请努力格式化您的代码,使其更易于阅读。这将使人们更容易为您提供帮助。

标签: node.js loops puppeteer cheerio


【解决方案1】:

没有办法 break .map() 循环。您的 break 在常规函数中,而不是直接在 for 循环中,因此它所在的位置不是法律声明。

如果您真正想做的只是在满足某些条件时从外部函数中return,则将.map() 更改为for 循环,然后您可以在满足条件时从外部函数返回.仅供参考,需要在退货前使用break。您可以在任何地方的函数中 return。但是,当你在 .map() 回调中时,你不能从外部函数返回,你只能从 .map() 回调中返回。

如果你想做的是打破.map()循环,然后将.map()循环转换为for循环,然后你可以从中break

没有办法从内部循环内部中断外部for loop。您要么重新组织代码,要么使用一些标志,您可以检查以跳出内循环,然后在外循环中 hck 标志,然后跳出内循环。

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 2018-10-23
    • 2014-09-25
    • 1970-01-01
    • 2010-10-02
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多