Node.JS MySQL查询嵌套函数返回数组

时间:2014-02-04 20:47:44

标签: node.js variables scope return-value anonymous-function

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

这是我的代码。我正在使用该代码查找某些设备的最后坐标并在谷歌地图中显示它们。但我需要首先能够从ouside访问数组,所以我可以做类似的事情:

myModule.searchCoords().result

或     myModule.searchCoords()().result

但是我仍然无法从外部函数访问数组(结果),更不用说从另一个模块访问了。 我一直在阅读关闭,范围,嵌套函数,匿名函数等,但我仍然找不到解决方案。我做错了什么?

1 个答案:

答案 0 :(得分:1)

问题是,查询是异步的,因此它无法在正常流中返回值。如果在调用searchCoords时传递函数,则可以在结果返回后调用该函数 - 这可能是在长时间延迟之后。这对于防止程序流程被阻止同时可能正在进行长时间的操作是必要的。

// 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...
// pass a function accepting results object that will be executed as callback
// once results have been returned...
searchCoords(function(resultsObject){
    console.log(resultsObject.result)
})