gpt4 book ai didi

javascript - Node.js 只使用数组中的最后一项

转载 作者:行者123 更新时间:2023-11-30 10:21:03 25 4
gpt4 key购买 nike

嗨,Javascript/Node.js 开发人员,

我遇到了异步 Javascript 的老问题,只给我数组的最后一项(如 HEREHERE 所示)。不幸的是,所提供的解决方案都不适合我。

我在 Node 版本 0.10.25 上运行。我编译了一个最小的(不是)工作示例:

var neededTables = [{
name: "ipfix_exporters",
},{
name: "ipfix_messages",
}];

var params = {};

console.log('[1] Connected to hana-database');
neededTables.forEach(function(table) {
params.table = table;
console.log("Checking table: " + params.table.name);
checkForTable.bind(null, params)();
});

function checkForTable(thoseParams) {
setTimeout(
(function(myParams) { return function(err, rows) {
if(err) {
console.log(err);
return;
}
console.log("Table '"+myParams.table.name+"' does exist!");
}})(thoseParams), 1000);
}

预期输出:

[1] Connected to hana-database
Checking table: ipfix_exporters
Checking table: ipfix_messages
Table 'ipfix_exporters' does exist!
Table 'ipfix_messages' does exist!

实际输出:

[1] Connected to hana-database
Checking table: ipfix_exporters
Checking table: ipfix_messages
Table 'ipfix_messages' does exist!
Table 'ipfix_messages' does exist!

我完全被难住了。希望有人

最佳答案

在这段代码中:

neededTables.forEach(function(table) {
params.table = table;
console.log("Checking table: " + params.table.name);
checkForTable.bind(null, params)();
});

当您设置 params.table 时,foreach 函数的每次迭代都会使用下一个表更新 params.table。

当您使用 1000 毫秒的超时调用下面的函数时,foreach 循环将立即继续,因为超时是异步的,将 params.table 设置为下一个表。这将一直持续到 foreach 循环结束,其中 params.table 被设置为数组中的最后一个值。

因此,当所有超时的回调发生时,foreach 函数将已经完成,并且所有回调将打印相同的值。

关于javascript - Node.js 只使用数组中的最后一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21427339/

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