2016-04-16 8 views
0

シンクロナイゼーションが与えられている.netの世界では、データベース、ルーセン、または他のAPIなどのバックエンドソースからデータをクエリできます。これは、node.jsに対して、asyncが標準であるサンプルを見つけるのに問題があります。node.jsとhapi:データベースからデータを同期的にフェッチする

問題は、クライアントが私のhapiサーバーへのAPI呼び出しを行っていることです。そこで、requestライブラリを使用してパラメータを取得し、Elasticsearchクエリを呼び出して待機する必要がありますインスタンスが返されてビューを生成してクライアントに返す前に、データが返されると要求ライブラリがコールバックを使用し、空のビューがそれまでにクライアントに返されていたという問題があります。

javascriptのEOFがすでにヒットし、nullが返されているため、コールバック内に戻り値を配置しようとしましたが、サービスコール内のデータを取得する最良の方法は何ですか?

EX:入れ子にコールバックすることにより、あなたのHAPIハンドラで

var request = require('request'); 
var options = { 
    url: 'localhost:9200', 
    path: {params}, 
    body: { 
    {params} 
    } 
} 

request.get(options, function(error, response){ 
    // do data manipulation and set view data 
} 

// generate the view and return the view to be sent back to client 
+0

あなたのHapiコードを表示できますか? –

答えて

1

ラップ要求コール非同期タスクが正しいロジック順序で実行されるように。擬似HAPIハンドラコード私はあなたがあなたのクライアントに返信する前に、非同期タスクを実行するために役立つHAPIの前のハンドラを使用し、以前のあなたの最後の質問で述べたよう

function (request, reply) { 

    Elasticsearch.query((err, results) => { 

     if (err) { 
      return reply('Error occurred getting info from Elasticsearch') 
     } 

     //data is available for view 


    }); 


} 

を以下の通りです。詳細は、ドキュメントhereを参照してください。リクエストの代わりにwreckを使用すると、より堅牢で使用が簡単になります

関連する問題