来自同步性的.net世界,我可以从后端源(如数据库,lucene,甚至是其他API)查询我的数据,我很难找到这个节点的好样本.js,其中async是常态。
我遇到的问题是客户端正在对我的hapi服务器进行API调用,从那里我需要接受参数并使用request
库形成一个Elasticsearch查询来调用然后在填充我的视图并将其发送回客户端之前等待实例返回,问题是请求库在返回数据后使用回调,并且那时空视图早已返回到客户端。
尝试将回报置于回调中是行不通的,因为javascript的EOF已经被点击并且返回了null,在服务调用中检索数据的最佳方法是什么?
EX:
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 :(得分: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的预处理程序来帮助您在回复客户端之前执行异步任务。有关详细信息,请参阅文档here。也可以使用wreck代替请求它使用更健壮,更简单