Javascript 向返回回调传递额外参数
我正在使用以下格式的库函数:Javascript 向返回回调传递额外参数,javascript,node.js,Javascript,Node.js,我正在使用以下格式的库函数: let arr = [1,2,3] arr.forEach((item, i) =>{ doSomething(inputParam, (err, result)=>{ ... //Use err and result }); }) err和result是在我尚未开发的库函数中设置的 如何将额外的参数I传递给回调函数 注意:我希望每个回调中的I与正确的索引相对应。因为它们是异步的,所以在完成任务时,它们
let arr = [1,2,3]
arr.forEach((item, i) =>{
doSomething(inputParam, (err, result)=>{
...
//Use err and result
});
})
err
和result
是在我尚未开发的库函数中设置的
如何将额外的参数I
传递给回调函数
注意:我希望每个回调中的
I
与正确的索引相对应。因为它们是异步的,所以在完成任务时,它们都会看到i的最后一个值,这不是我想要的。例如,第二个回调应该看到i=2,第三个回调应该看到i=3
我需要这样的东西:
let arr = [1,2,3]
arr.forEach((item, i) =>{
doSomething(inputParam, (err, result, i)=>{
...
//Use err and result
console.log("i: ", i);
});
})
您的第二次尝试已结束,只需在
结果
之后删除i
,它就会工作
这里是一篇关于
让arr=[1,2,3]
arr.forEach((项目,i)=>{
doSomething('inputParam',(错误,结果)=>{
console.log(“i:,i”);
})
})
函数doSomething(参数,回调){
回调('错误','结果')
}
您的第二次尝试已接近成功,只需在结果
之后删除i
,它就会工作
这里是一篇关于
让arr=[1,2,3]
arr.forEach((项目,i)=>{
doSomething('inputParam',(错误,结果)=>{
console.log(“i:,i”);
})
})
函数doSomething(参数,回调){
回调('错误','结果')
}
您无法控制回调的参数。这些由调用者设置,调用者是doSomething()
函数的内部,您说该函数不是您可以控制的。因此,不要尝试在那里添加调用方未设置的内容。那只会把你搞得一团糟
相反,因为您使用的是内联回调,所以您可以直接访问父范围中的变量,而无需将它们定义为回调的参数。这是Javascript的一个很好的特性(可以访问父范围变量的内联回调)
下面是一个可运行的示例:
让arr=[1,2,3];
让inputParam=“某物”;
arr.forEach((项目,i)=>{
剂量测量(输入参数,(错误,结果)=>{
//您可以在此处访问父范围中的变量,如i
//从内联回调
//使用错误和结果
console.log(“i:,i”);
});
});
函数doSomething(参数1,回调){
//模拟异步回调
setTimeout(函数(){
回调(null,“hello”);
}, 100);
}
您无法控制回调的参数。这些由调用者设置,调用者是doSomething()
函数的内部,您说该函数不是您可以控制的。因此,不要尝试在那里添加调用方未设置的内容。那只会把你搞得一团糟
相反,因为您使用的是内联回调,所以您可以直接访问父范围中的变量,而无需将它们定义为回调的参数。这是Javascript的一个很好的特性(可以访问父范围变量的内联回调)
下面是一个可运行的示例:
让arr=[1,2,3];
让inputParam=“某物”;
arr.forEach((项目,i)=>{
剂量测量(输入参数,(错误,结果)=>{
//您可以在此处访问父范围中的变量,如i
//从内联回调
//使用错误和结果
console.log(“i:,i”);
});
});
函数doSomething(参数1,回调){
//模拟异步回调
setTimeout(函数(){
回调(null,“hello”);
}, 100);
}
在结果
之后删除i
参数,只需执行控制台.log(“i:,i)
,它应该可以工作,您不需要将其传递到某个位置……它已经在该函数调用内使用的范围内。只需从回调的参数中删除i
。[仅将(err,result,i)
转换为(err,result)
]。您不控制回调的参数。这些由调用者设置,调用者是doSomething()
函数的内部,您说该函数不是您可以控制的。因此,不要尝试在那里添加调用方未设置的内容。那只会把你搞得一团糟。因此,由于您使用的是内联回调,因此可以直接访问父范围中的变量,而无需将它们定义为回调的参数。这是Javascript的一个很好的特性(可以访问父作用域变量的内联回调),但我希望每个回调中的I
对应于正确的索引。由于它们是异步的,在完成时,它们都会看到i的最后一个值,这不是我想要的。在结果之后删除i
参数,只需执行控制台.log(“i:,i)
,它应该可以工作,您不需要将其传递给任何东西……它已经在能够在该函数callonly中使用的范围内从回调的参数中删除i
。[仅将(err,result,i)
转换为(err,result)
]。您不控制回调的参数。这些由调用者设置,调用者是doSomething()
函数的内部,您说该函数不是您可以控制的。因此,不要尝试在那里添加调用方未设置的内容。那只会把你搞得一团糟。因此,由于您使用的是内联回调,因此可以直接访问父范围中的变量,而无需将它们定义为回调的参数。这是Javascript的一个很好的特性(可以访问父作用域变量的内联回调),但我希望每个回调中的I
对应于正确的索引。由于它们是异步的,在完成时,它们都将看到i的最后一个值,这不是我想要的。我希望每个回调中的i
对应于正确的索引。由于它们是异步的,在完成时,它们都将看到i
的最后一个值,这不是我想要的。在这个解决方案中,我得到了正确的值吗?@Ari-No。这不是问题(就像我一样)