gpt4 book ai didi

node.js - Node.js 回调中的引用

转载 作者:太空宇宙 更新时间:2023-11-04 01:15:28 24 4
gpt4 key购买 nike

当一个基本问题出现时,我刚刚编写了一些测试。我编写了一个测试框架的框架。它首先将所有测试(它们的回调)收集在一个数组中,然后在一个单独的循环中执行它们。然而,这

//test.js
var testArray = [
{
n : 1,
d : 'text1'
},
{
n : 2,
d : 'text2'
}
];

var cbs = [];
function fnWithCallback(d, cb) {
console.log('d=('+d+')');
cbs.push(cb);
}

for(var i=0; i < testArray.length; i++) {
var v = testArray[i];

fnWithCallback(v.d, function() {
console.log('v=('+v.n+'), i=('+i+')');
});
}

for(var j=0; j < cbs.length; j++) {
cbs[j]();
}

当我运行此示例时,我得到以下信息:

> node test.js
d=(text1)
d=(text2)
v=(2), i=(2)
v=(2), i=(2)

这意味着在回调中,“v”已分配给最后一个数组的最后一个元素,“i”已分配给它的最后一个状态,而不是回调已“创建”并传递给“fnWithCallback”时的状态功能。但是,由于“d”是在回调中打印出来的,因此在调用“fnWithCallback”时它具有元素的值。

“解除循环”循环没有帮助。

var v = testArray[0];

fnWithCallback(v.d, function() {
console.log('v=('+v.n+')');
});

v = testArray[1];

fnWithCallback(v.d, function() {
console.log('v=('+v.n+')');
});

导致相同的行为。

有人可以解释一下并提供解决方案吗?

最佳答案

使用闭包

fnWithCallback(v.d, (function(v,i){
return function() {
console.log('v=('+v.n+'), i=('+i+')');
};
})(v,i)));

关于node.js - Node.js 回调中的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10193185/

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