0

来自一个给定同步性的 .net 世界,我可以从后端源(例如数据库、lucene 甚至其他 API)查询我的数据,但我很难为 node.js 找到一个好的示例,其中异步是常态。

我遇到的问题是客户端正在对我的 hapi 服务器进行 API 调用,我需要从那里获取参数并形成一个 Elasticsearch 查询来调用,使用request库,然后等待实例返回在填充我的视图并将其发送回客户端之前,问题是请求库在返回数据后使用回调,并且到那时空视图早已返回给客户端。

尝试在回调中放置返回不起作用,因为 javascript 的 EOF 已经被命中并且在它的位置返回 null,在服务调用中检索数据的最佳方法是什么?

前任:

 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
4

1 回答 1

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


     });


 }

正如我在上一个问题中所说的,在回复客户之前,使用 hapi 的预处理程序来帮助您执行异步任务。有关更多信息,请参阅此处的文档。也使用wreck而不是 request 它更健壮且更易于使用

于 2016-04-16T22:33:55.110 回答