【问题标题】:Why does my for-loop code in javascript only run once?为什么我在javascript中的for循环代码只运行一次?
【发布时间】:2021-04-07 03:49:49
【问题描述】:

我不知道为什么 for 循环只运行一次。 我的意图是让代码贯穿foodGroupIdsOnPage1 中的所有元素。 但它现在只贯穿第一个元素。

谁能给我解释一下?提前感谢您的帮助。


async function initialize() {
    const browser = await playwright.chromium.launch({
        headless: false
    });
    const context = await browser.newContext();                        ////create a new browser context, which means no cookies and cache saved
    const tab1 = await context.newPage();
    return { tab1, context };
}

async function GotoPage2() {     ////wait for function>>>only run the next command after all the commands inside the next bracket run

    const page1_foodGroupButton = id.querySelector('a')         ////beginning of the for loop
    await page1_foodGroupButton.click();
};

async function main() {

    const { tab1, context } = await initialize();

    await tab1.goto('https://www.cfs.gov.hk/tc_chi/nutrient/search1.php');

    const foodGroupIdsOnPage1 = await tab1.evaluate(async function getFoodGroupsOnPage1() {

        return [...document.querySelector('.tableResponsive').querySelectorAll('td ')].map(e => e.id);

    })

    for (let id of foodGroupIdsOnPage1) {

        await tab1.evaluate(id => {

            const page1_foodGroupButton = document.querySelector('[id=' + `"${id}"` + ']').querySelector('a')         ////beginning of the for loop
            page1_foodGroupButton.click();

        }, id);

        await tab1.waitForTimeout(2000);
        await tab1.click('[id^=grp] > a');

        await tab1.waitForTimeout(2000);
        const ArrayOfTabs = context.pages();   ////get how many tabs chromium are

        let tab2 = ArrayOfTabs[1];              ////make active tab to the second tab
        await tab2.evaluate(async function extractFoodGroupData() {
            let tableOfAllFoods = [];
            let rowsOnPage3 = document.querySelector(".colorTable2").querySelectorAll("tr");
            for (let row_OnPage3 of rowsOnPage3) {
                let arrayNutritionOfOneFood = [];
                let cellsInOneRow = row_OnPage3.querySelectorAll("td");
                for (let cell of cellsInOneRow) {
                    arrayNutritionOfOneFood.push(cell.innerText);
                }

                tableOfAllFoods.push(arrayNutritionOfOneFood);
            }

        });
        tab2.close();
        tab1.goBack();
        return;

    }

}

main();

【问题讨论】:

  • 会不会是循环范围底部的return语句?
  • “它”是什么意思?我的代码中断的原因是什么?我是一个非常初学者。你知道如何解决吗?谢谢保罗。
  • 是的,it 我的意思是你遇到的问题。换一种方式。它在循环的第一次迭代后停止的原因可能是return 语句吗? tab1.goBack(); 之后的那个?这不仅会退出循环,还会退出整个 main 函数。
  • 您在for 循环中的return 语句将退出循环并退出该点的函数。

标签: javascript node.js for-loop browser playwright


【解决方案1】:

我找到了解决办法。

第一个问题是return 终止了迭代。所以删除它。

第二个问题是第二个迭代周期运行之前 tab1.goBack();

只需在tab1.goBack(); 之前添加await 即可解决第二个问题。

【讨论】:

    猜你喜欢
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-13
    • 1970-01-01
    相关资源
    最近更新 更多