【发布时间】: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