Javascript 如何将变量传递给Node.js中异步函数的回调?
下面是一些示例代码,它们描述了我试图完成的不同任务 在示例代码中,我有一个名为Javascript 如何将变量传递给Node.js中异步函数的回调?,javascript,node.js,promise,Javascript,Node.js,Promise,下面是一些示例代码,它们描述了我试图完成的不同任务 在示例代码中,我有一个名为outer\u func(multiplier)的助手函数,我将从其他模块调用该函数。此辅助函数接收单个参数,乘数 var fn2 = function asyncMultiplyBy2(v){ // sample async action return new Promise(resolve => setTimeout(() => resolve(v * 2), 100)); } var fn3
outer\u func(multiplier)
的助手函数,我将从其他模块调用该函数。此辅助函数接收单个参数,乘数
var fn2 = function asyncMultiplyBy2(v){ // sample async action
return new Promise(resolve => setTimeout(() => resolve(v * 2), 100));
}
var fn3 = function asyncMultiplyBy3(v, w /*I want to pass multiplier here*/){ // sample async action
return new Promise(resolve => setTimeout(() => resolve(v * w), 100));
}
function get_array() {
return new Promise(resolve => setTimeout(() => resolve([1, 2, 3, 4, 5]), 100));
}
function outer_func(multiplier) {
get_array().then(function(array) {
var actions = array.map(fn2);
var results = Promise.all(actions);
results.then(function(newArray) {
var finalActions = newArray.map(fn3);
var finalResults = Promise.all(finalActions);
console.log(multiplier) //undefined, but I would like to use this variable here
finalResults.then(function(finalArray) {
console.log(finalArray);
})
})
})
}
outer_func(3);
但是,在使用此参数之前,我需要异步获取数据点数组。此函数不需要使用乘法器,并且在收到数组之前无法调用后续函数。因此,我想知道如何最好地将乘法器传递给嵌套在中的函数。然后get\u array()的回调
var fn2 = function asyncMultiplyBy2(v){ // sample async action
return new Promise(resolve => setTimeout(() => resolve(v * 2), 100));
}
var fn3 = function asyncMultiplyBy3(v, w /*I want to pass multiplier here*/){ // sample async action
return new Promise(resolve => setTimeout(() => resolve(v * w), 100));
}
function get_array() {
return new Promise(resolve => setTimeout(() => resolve([1, 2, 3, 4, 5]), 100));
}
function outer_func(multiplier) {
get_array().then(function(array) {
var actions = array.map(fn2);
var results = Promise.all(actions);
results.then(function(newArray) {
var finalActions = newArray.map(fn3);
var finalResults = Promise.all(finalActions);
console.log(multiplier) //undefined, but I would like to use this variable here
finalResults.then(function(finalArray) {
console.log(finalArray);
})
})
})
}
outer_func(3);
编辑:
我在fn3
中添加了一条注释,说明我希望传递乘数的位置。您是否检查了乘数是否已首先定义?范围看起来很好,我希望乘数可以在您需要的地方使用。将上述代码粘贴到JSFIDLE中的工作方式与您所期望的一样。乘法器记录为3如果您传递了乘法器,那么它将工作,它也将在func开始时未定义,因此不确定您在问什么?他说的是nodejs行为different@ShyamJoshi不,nodejs范围规则和闭包行为没有什么不同。发布的代码有效。@Bergi我相信你是正确的,不知道为什么我在输出中没有定义,但我现在看到3。我将结束这个问题,并为这个问题的第二部分添加一个新问题。谢谢