【问题标题】:Node.JS callback containing an array [duplicate]包含数组的 Node.JS 回调
【发布时间】:2014-02-04 21:37:47
【问题描述】:
// accept a callback function to execute after getting results...
function searchCoords(callback){
  var result = result;
  connection.query('SELECT * FROM monitoring', function(err, result){
    if(err){
      console.log(err);
    }
    // run the callback function, passing the results...
    callback({result: result});
  });
}

// call like this...
searchCoords(function(resultsObject){
    console.log(resultsObject.result)
});

这是我的代码,我有一个匿名嵌套函数,它通过使用回调函数将变量返回到外部。但是,返回的变量(结果)是一个数组,我需要在 node.js 中与 googlemaps api 一起使用。怎么转这个:

searchCoords(function(resultsObject){
   console.log(resultsObject.result)
});

放入将包含整个数组的变量中,以便我可以从 api 中的标记选项调用它

【问题讨论】:

  • var someVariable = resultsObject.result ?
  • var result = result 应该做什么?
  • 不知道为什么我做了 result = result...虽然它并没有真正影响任何事情
  • var someVariable = resultsObject.result 这无济于事,因为它仍然在函数内部

标签: javascript arrays node.js anonymous-function nested-function


【解决方案1】:

为什么不将回调传递给函数,而不是传递一个可以附加到的数组?

function start() {
    var myCoords = [];
    searchCoords(myCoords);
    otherFunction(myCoords); // This function does stuff with myCoords

}

function searchCoords(myCoords){
  connection.query('SELECT * FROM monitoring', function(err, result){
    if(err){
      console.log(err);
    }
    else {
      myCoords.push({result: result});
    }
  });
}

【讨论】:

  • 它不会改变任何事情,如果我尝试从外部访问它,它仍然返回未定义或只是说它不存在。我必须尝试从外部调用该数组,以便我可以通过另一个函数运行它,该函数将坐标转换为正确的格式,以便我可以将其作为谷歌地图掩码器
  • “外面”是什么意思?在我的示例中,myCoords 仅存在于 start 和 searchCoords 中。如果您希望它存在于其他地方,则需要将其传递到那里或将其移动到更高的范围。我认为您要寻找的简单答案是使其成为全球性的,您可以在方法之外或在 window.myCoords 上定义它,但这将是不好的编程习惯并且是不明智的,因此您应该真正解释什么是“外部" 以便我们可以为数组创建适当的范围。
  • 在外部我的意思是从另一个函数调用它,只使用函数的名称和变量的名称,例如 searchCoords.result。
  • 我需要对结果数组做的是将它传递给其他函数来转换一些字段,这样我就可以从谷歌地图 api 标记选项中调用转换后的变量
  • 我刚刚编辑了我的答案以包含名为“otherFunction”的“另一个函数”我希望能回答您的问题,如果没有,您需要向我们展示更多代码。
【解决方案2】:

好的,这就是现在的代码:

function searchCoords(myCoords){
      var result = result;
      connection.query('SELECT * FROM monitoring', function(err, result){
        if(err){
          console.log(err);
        }
          myCoords.push({result: result});
      });
}

which i call from main.js like this:
function start() {
    var myCoords = {};
    myCoords = database.searchCoords(myCoords);
    console.log(myCoords);
    //otherFunction(myCoords); // This function does stuff with myCoords
}

这接近我想要获得的解决方案,但仍然无法正常工作。相反,控制台显示

TypeError: Object #<Object> has no method 'push'

我需要一个简单的函数来获取匿名嵌套函数给出的结果并将其转换为我可以更轻松地操作的变量,因此我可以将其添加到谷歌地图 api 中的标记参数

【讨论】:

  • 你解决了吗?
  • 是的,但那是很久以前的事了...我什至不记得为什么我有这个问题了...但是无论如何,您可以将 te 回调作为回调返回({result:结果}),或者只是回调(结果)......并调用使用回调中的结果,例如这个resultsObject.result,或者类似...... resultsObject(这取决于你是返回一个对象还是只是一个不同类型的变量.
猜你喜欢
  • 2021-08-17
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2016-09-12
  • 1970-01-01
  • 1970-01-01
  • 2012-02-05
相关资源
最近更新 更多