gpt4 book ai didi

javascript - 使用 async.forEach 循环在异步函数中覆盖变量

转载 作者:太空宇宙 更新时间:2023-11-04 02:46:44 40 4
gpt4 key购买 nike

我偶然发现了(或者当然是我自己创造的)一个我无法在脑海中建模的错误。我使用具有不同 ID 的 webdriverio 客户端迭代调用 URL 并解析生成的 HTML。 但是,html 变量会被循环中的最后一个元素覆盖,这会导致数组包含最后一个 html 变量值的多个重复项:

async.forEach(test, function (id, callback) {
self.url('https://<api-page>?id=' + id).getHTML('table tbody', true).then(function(html) {
//Parse HTML
parser.write(html);
parser.end();

//Add course to person, proceed to next.
callback();
});
}, function (err) {
self.end().finally();
res.json(person);
});

使用 htmlparser2 NPM 库完成解析。 html 变量始终返回最后一个元素,即使我可以看到它使用不同的数据遍历不同的 API id。我认为错误出现在我获取 HTML 并返回它时,但我无法说出原因,也无法说明我的任何修复都不起作用。

希望比我更熟练的人能够看到这个错误。

提前致谢,克里斯

更新/解决方案 - 请参阅下面的解决方案

最佳答案

我不确定我是否很好地理解了上下文,但 html 变量没有被覆盖,它只是您从 self.url 函数调用中检索到的最后一个 block 。如果您想将整个结果保存在变量中,则应该在每个循环上附加结果。也许,您需要类似的东西:

var html = '';

async.forEach(test, function (id, callback) {
self.url('https://<api-page>?id=' + id).getHTML('table tbody', true).then(function (tmpHtml) {
//Parse HTML
parser.write(tmpHtml);
parser.end();

html += tmpHtml;
//Add course to person, proceed to next.
callback();
});
}, function (err) {
self.end().finally();
res.json(person);
});

关于javascript - 使用 async.forEach 循环在异步函数中覆盖变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39727445/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com