2016-07-16 16 views
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')); 

あなたはあなたがコールバックを使用する必要が

+0

)値 –

+0

あなたの機能はすでに非同期です。同期と非同期の違いを調べる必要があります。あなたが求めているのは、非同期関数からは得られない同期結果です。すべてのオプションについて重複した質問を読んでください。非同期操作から直接値を返すことはできません。コールバック、約束、または他の同様のテクニックを使用する必要があります。これにより、値が準備されたときに後で通知することができます。 – jfriend00

答えて

0

を提供することができる任意の助けてくれてありがとう。このような何か:私はuがjsonQueryを(返すために持っていると思う

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); 
}); 
関連する問題