如何创建从REST API获得价值的先决条件?如何实现 getCount 函数以等待API响应并在路由处理函数中使用它? (请注意,我正在使用Hapi 8.3.1)
server.route({
method: 'GET',
path: '/products',
config: {
state: {
failAction: 'ignore'
},
pre:[{method:getCount, assign: 'count'}],
handler: function (request, reply) {
console.log(request.pre.count);
reply({products}).code(200);
}
}
});
function getCount(request, reply){
http.get('/products/count/')
// how to implement this to wait till get product count;
}
答案 0 :(得分:1)
您似乎想在代码继续之前等待HTTP请求完成?在这种情况下,您将需要使getCount成为异步函数,并等待get请求。您还应该使用fetch()而不是http.get()。因此,您最终将得到以下结果:
server.route({
method: 'GET',
path: '/products',
config: {
state: {
failAction: 'ignore'
},
pre:[{method:getCount, assign: 'count'}],
handler: function (request, reply) {
console.log(request.pre.count);
reply({products}).code(200);
}
}
});
async function getCount(request, reply){
let count = await fetch('/products/count/');
return count;
}
这将等待请求完成,然后再返回值。如果您的节点版本不支持异步/等待,也可以使用.then()和Promises来执行此操作。使用该代码将产生如下代码:
server.route({
method: 'GET',
path: '/products',
config: {
state: {
failAction: 'ignore'
},
pre:[{method:getCount, assign: 'count'}],
handler: function (request, reply) {
console.log(request.pre.count);
reply({products}).code(200);
}
}
});
function getCount(request, reply){
return new Promise(function (resolve, reject) {
fetch('/products/count/').then(function(result) {
resolve(result);
}).catch(function (err) {
reject(err);
});
});
}