У меня есть пара API, которые мне нужно вызвать, чтобы собрать и объединить информацию.Я делаю первый вызов API и, основываясь на результате, я делаю несколько вызовов на второй (в цикле).Поскольку http-запросы асинхронны, я теряю информацию.Ко времени окончания второго шага сервер (nodejs) уже отправил ответ клиенту.
Я уже пытался каким-то образом использовать функции обратного вызова.Это позволило удержать ответ на ожидании клиента, но информация о втором вызове все еще была потеряна.Я предполагаю, что переменные не синхронизируются.Я также провел быстрое тестирование с away / async, но моего Javascript mojo было недостаточно, чтобы запустить его без ошибок.
/* pseudo code */
function getData(var1, callback){
url= "http://test.server/bla?param="+var1;
request.get(url, function (error, response, body){
var results = [];
for(var item of JSON.parse(body).entity.resultArray) {
var o = {};
o['data1'] = item.data1;
o['data2'] = item.data2;
o['data3'] = item.data3;
getSecondStep(o, function(secondStepData){
//console.log("Callback object");
//console.log(o);
o['secondStepData'] = secondStepData;
});
results.push(o);
}
callback(results);
});
}
function getSecondStep(object, callback){
url = "http://othertest.server/foobar?param=" + object.data1;
request.get(url, function (error, response, body){
var results = [];
if(response.statusCode == 200){
for(var item of JSON.parse(body).object.array) {
var o = {}
o['data4'] = item.data4;
o['data5'] = item.data5;
results.push(o);
}
callback(results);
}
});
}
Я хотел бы иметь возможность собирать всю информацию в один объект JSONвернуть его обратно клиенту.Клиент будет тогда ответственен за то, чтобы сделать это хорошим способом.