【问题标题】:Asynchronous blocking return variable from object in function node.js [duplicate]函数node.js中对象的异步阻塞返回变量[重复]
【发布时间】:2016-11-19 09:57:36
【问题描述】:

我正在使用一个函数来访问 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'));

感谢您提供的任何帮助

【问题讨论】:

  • 我认为你必须返回 jsonQuery().value
  • 你的函数已经是异步的了。您需要研究同步和异步之间的区别。您要求的是同步结果,您无法从异步函数中获得。阅读所有选项的重复问题。您不能直接从异步操作返回值。您必须使用回调、promise 或其他类似技术,以便稍后在值准备好时通知您。

标签: javascript json node.js asynchronous


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 1970-01-01
    • 2023-04-05
    • 2020-06-28
    • 1970-01-01
    相关资源
    最近更新 更多