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

Asynchronous blocking return variable from object in function node.js

本文关键字:对象 返回 变量 js 节点 函数 异步      更新时间:2023-09-26

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

查询

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

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'));

感谢您提供的任何帮助

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

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);
});