微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

非法中断声明 NodeJs & Cheerio

如何解决非法中断声明 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 循环。你要么重新组织代码,要么使用一些你可以检查的标志来跳出内循环,然后在外循环中检查标志,然后跳出内循环。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。