我获取请求从一个API获取JSON数据,并在get请求的回调内部进行另一个POST调用,将此数据POST到另一个API。这似乎不适合我。
var request = require('request');
function startFetchingHistory(postToApp){
request.get(url, function(err, res, body) {
postToApp(body);
});
}
function postToApp(body) {
var options = {
uri: 'http://localhost:3079/history',
method: 'POST',
json : body
};
request(options, function(error, response, body) {
console.log(error+response+body);
if (!error && response.statusCode == 200) {
console.log(body);
} else {
logger.error('Error from server is' + error);
}
});
}
以上不起作用。通过“不工作”,我的意思是永远不会调用POST请求回调。但是,如果我直接调用postToApp()方法,POST请求会成功。
答案 0 :(得分:0)
可能是因为postToApp()需要变量' request'目前正由异步函数使用它(request.get)。
尝试制作另一个var innerRequest = require(' request');并将其用于postToApp()。
旁注:我认为通过将body返回到startFetchingHistory()范围内的变量并将其用作postToApp()
的arg,可能有更好的方法来实现它。答案 1 :(得分:0)
两个重要概念
request
本质上是异步的如果您查看功能postToApp
,请致电
请求(选项,功能(错误,响应,正文){
这将转到你的eventloop,函数执行并完成,而不必等待post调用完成。
现在,您要做的是等待函数postToApp
完成。最简单的IMO,如果要在postToApp
var request = require('request');
function startFetchingHistory(postToApp) {
request.get(url, function (err, res, body) {
postToApp(body, (postResponse) => {
//respond back with the result/error to your API
});
});
}
function postToApp(body, callback) {
var options = {
uri: 'http://localhost:3079/history',
method: 'POST',
json: body
};
request(options, function (error, response, body) {
console.log(error + response + body);
if (!error && response.statusCode == 200) {
console.log(body);
callback(body) // call the function back with the data you want to process;
} else {
logger.error('Error from server is' + error);
callback(error) // call the function back with error to process;
}
});
}