0
JSONファイルのデータにアクセスし、そのファイルに特定のキーを照会する関数を使用しています。その結果を返そうとしていますが、クエリがキーを見つける前にリターン関数が実行されているようです。関数node.jsのオブジェクトからの非同期ブロッキング戻り値
クエリの後、クエリ関数で変数queryresponseが返された後、常に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();
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'));
あなたはあなたがコールバックを使用する必要が
)値 –
あなたの機能はすでに非同期です。同期と非同期の違いを調べる必要があります。あなたが求めているのは、非同期関数からは得られない同期結果です。すべてのオプションについて重複した質問を読んでください。非同期操作から直接値を返すことはできません。コールバック、約束、または他の同様のテクニックを使用する必要があります。これにより、値が準備されたときに後で通知することができます。 – jfriend00