非法中断声明 NodeJs & Cheerio

问题描述

我正在尝试循环 .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();

解决方法

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

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

如果您想做的是从 .map() 循环中断,那么将 .map() 循环转换为 for 循环,然后您可以从中break

无法从内部循环内部中断外部 for 循环。你要么重新组织代码,要么使用一些你可以检查的标志来跳出内循环,然后在外循环中检查标志,然后跳出内循环。