喜同胞的JavaScript/Node.js的开发者,的Node.js只在阵列使用最后一个项目
我遇到好老问题与异步JavaScript给我一个数组的只有最后一项(如图HERE和HERE)。不幸的是,没有提供的解决方案为我工作。
我在节点版本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!
我完全难倒。希望有人
请您进一步解释为什么绑定“params”不起作用,但绑定“表”做了诡计?是否因为范围而“恰好”? –
因为你绑定的*同*对象的每个功能,你再改。每个'table'对象都是不同的,并且在异步函数运行之前不要更改它们。 – OrangeDog
简而言之:结合(以及任何其它闭合捕获)取引用,而不是拷贝。 – OrangeDog