gpt4 book ai didi

javascript - 将额外参数传递给返回回调

转载 作者:行者123 更新时间:2023-12-01 01:51:55 25 4
gpt4 key购买 nike

我正在使用以下格式的库函数:

let arr = [1,2,3]
arr.forEach((item, i) =>{
doSomething(inputParam, (err, result)=>{
...
//Use err and result
});

})

errresult是在我没有开发的库函数中设置的。

如何将额外的参数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);
});

})

最佳答案

您无法控制回调的参数。这些是由调用者设置的,这是 doSomething() 函数的内部,你说这不是你控制的东西。因此,不要尝试在那里添加调用者未设置的内容。那只会让你陷入困境。

相反,由于您使用的是内联回调,因此您可以直接访问父作用域中的变量,而无需将它们定义为回调的参数。这是 Javascript 的一个很好的功能(可以访问父作用域变量的内联回调)。

这是一个可运行的示例:

let arr = [1, 2, 3];
let inputParam = "something";

arr.forEach((item, i) => {
doSomething(inputParam, (err, result) => {
// you can access variables such as i in the parent scope here
// from an inline callback

//Use err and result
console.log("i: ", i);
});
});

function doSomething(param1, callback) {
// simulate async callback
setTimeout(function() {
callback(null, "hello");
}, 100);
}

<小时/>

如果您需要使用非内联的回调(例如在另一个模块中定义的回调),您可以创建一个小的内联回调 stub ,然后它可以访问父作用域变量,然后可以使用以下命令调用外部定义的函数所需参数。

let arr = [1, 2, 3];
let inputParam = "something";

function yourExternalFunction(err, result, i) {
// Use err and result and i
console.log("i: ", i);
}

arr.forEach((item, i) => {
doSomething(inputParam, (err, result) => {
// you can access variables such as i in the parent scope here
// from an inline callback
yourExternalFunction(err, result, i) ;
});
});

function doSomething(param1, callback) {
// simulate async callback
setTimeout(function() {
callback(null, "hello");
}, 100);
}

关于javascript - 将额外参数传递给返回回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51413397/

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