javascript - 如何将元素推送到异步函数内的数组?
问题描述
如何在异步函数(木偶)内推送数组中的元素?
该页面被结构化为严重的级别。只有通过单击具有特定 ID 的单元元素内的链接才能显示级别。
我已经实现了选择当前显示的 ID,将它们推入数组以循环并单击具有该 ID 的元素内的链接以打开下一个 hiracy。在此之后,我重复这个过程,通过循环遍历新选择的 ID 数组(旧 ID + 新 ID)减去前一个循环的 ID 数组(旧 ID)的差异。
执行第二个循环时出现问题。似乎我在异步函数内部将元素推入数组时犯了一个错误......有些链接没有被点击,但没有方案,所以我认为问题是由异步引起的。
谢谢!对不起,如果那不是一个正确的描述,那是我的第一个问题,我是这个异步世界的新手。
(async function main() {
try {
const browser = await puppeteer.launch({ headless: false });
const page = await browser.newPage();
await page.goto('---url---');
await page.waitForSelector('.cotable');
const arrIDMaster = [];
await levelLoop(page, arrIDMaster);
await levelLoop(page, arrIDMaster);
} catch (e) {
}
})();
async function levelLoop(page, arrIDMaster) {
const rows = await page.$$('.coRow.hi.coTableR');
const arrIDLocalGet = [];
//Get all ID's
for (const row of rows) {
const rowID = await page.evaluate(el => el.id, row);
await arrIDLocalGet.push(rowID);
}
// First one needs to be removed
arrIDLocalGet.shift();
//Create Local ID-Array - difference
const arrIDLocal = await differenceOf2Arrays(arrIDMaster,arrIDLocalGet);
// Loop through local ID-Array and Click
for (const id of arrIDLocal) {
const rows = await page.$('#' + id);
const link = await rows.$('a.KnotenLink');
await link.click();
}
//push only new ID's to global array
for (const id of arrIDLocal) {
await arrIDMaster.push(id);
}
};
function differenceOf2Arrays (array1, array2) {
return new Promise(resolve => {
let arrdiff = array2.filter(x => !array1.includes(x));
resolve(arrdiff);
});
};
希望有人可以帮助我,也许这只是generell的一个错误,因为我对这些东西很陌生。除此之外,我确信这不是最完美的解决方案,我也很高兴对此提出建议!
解决方案
推荐阅读
- java - UI 滞后于使用倒数计时器更新 textview 并在同一活动上具有 textview 选取框
- regex - 需要一个正则表达式 - 只允许零,允许其他数字的零
- java - 如何在Android中获取所选单选按钮的ID
- c++ - 了解 C++ 中函数的值类别
- java - 如果 raw 默认为 Object,则为通用参数
- ionic-framework - 尝试在ionic 4中使用用于斑马打印机的cordova插件进行打印
- android - 是什么让我的 uploadImage() 中的视图发生了变化?
- python - 安装 tensorflow 2 有问题
- javascript - Safari 和 WKWebview 中的不同滚动行为
- javascript - Chrome控制台中9_9和99作为整数有什么区别