Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将变量传递给Node.js中异步函数的回调?_Javascript_Node.js_Promise - Fatal编程技术网

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。我将结束这个问题,并为这个问题的第二部分添加一个新问题。谢谢