异步阻塞从函数node.js中的对象返回变量

时间:2016-07-16 07:19:58

标签: javascript json node.js asynchronous

我正在使用一个访问JSON文件中数据的函数,然后查询该文件中的特定键。我试图返回其调查结果,但似乎在查询找到密钥之前正在执行返回函数。

在查询之后我在查询函数中返回变量queryresponse,它总是以未定义的方式返回。

var jsonQuery = require('json-query');
var fs = require('fs');

function querydb(netdomain){
fs.readFile('./querykeys.json', 'utf8', function (err, data) {
    if (err){console.log('error');} 
    var obj = JSON.parse(data);
    var queryobject = netdomain.toString();
    var queryresponse =  jsonQuery('servers[netshare=' + queryobject + '].netdomain', {
          data: obj
        });
    return queryresponse;



});

}

console.log(querydb('timeline'));
// returns undefined.

如何使此语句异步?

我想表示我也尝试了这个,也没有功能,仍然给出了未定义的响应。

var jsonQuery = require('json-query');
var fs = require('fs');

function querydb(netdomain){
fs.readFile('./querykeys.json', 'utf8', function (err, data) {
    if (err){console.log('error');} 
    var obj = JSON.parse(data);
    var queryobject = netdomain.toString();
    return  jsonQuery('servers[netshare=' + queryobject + '].netdomain', {
          data: obj
        });




});

}

console.log(querydb('timeline'));

感谢您提供的任何帮助

1 个答案:

答案 0 :(得分:0)

您需要使用回调。像这样:

var jsonQuery = require('json-query');
var fs = require('fs');

function querydb(netdomain, callback) {
    fs.readFile('./querykeys.json', 'utf8', function (err, data) {
        if (err) {
            callback(err);
            return;
        }

        var obj = JSON.parse(data);
        var queryobject = netdomain.toString();
        callback(null, jsonQuery('servers[netshare=' + queryobject + '].netdomain', {
              data: obj
        }));
    });
}

querydb('timeline', function (err, result) {
    if (err) {
        console.log('ERROR: ' + err);
        return;
    }

    console.log(result);
});