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。这不是问题(就像我一样)