Я пытаюсь сделать функцию details()
, которая просматривает детали определенных событий (getdetails
) на основе доступных событий. В приведенном ниже примере запрашиваются сведения о событиях с идентификаторами ZRGZZ, RGHER и GRFDZ. Эти данные должны быть размещены внутри одного массива (кредиты от Theodore's answer). Результатом должно быть то, что когда я вызываю details()
, результирующий массив сохраняется, поэтому я могу использовать его позже.Asynchronous javascript issue
Проблема в том, что я не знаю, как я могу вернуть этот последний массив. console.log(JSON.stringify(res));
выполняется до завершения построения массива. Я знаю, что это, вероятно, что-то делать с асинхронным JS, но я просто не могу обернуть мою голову вокруг него ...
function details()
{
var res = {
"Result": "success",
"Key": "12345",
"Data": [{
"ID": "ZRGZZ",
"lastChangedDate": "2015-12-03 11:14:27"
}, {
"ID": "RGHER",
"lastChangedDate": "2015-12-03 15:17:47"
}, {
"ID": "GRFDZ",
"lastChangedDate": "2015-12-03 05:25:11"
}]
};
var i = 0;
var tmp;
res.Data.map(function(val,i){
getdetails(val.ID).then(function(data){
tmp = JSON.parse(data);
console.log(tmp);
Object.keys(tmp.Data[0]).map(function(v,j){
val[v] = tmp.Data[0][v];
console.log(JSON.stringify(res)); //(*)the last res gives me the result I'm looking for
});
}, function(error){ //error callback
console.log(error)
});
});
console.log(JSON.stringify(res)); //this is executed before (*)
}
Попробуйте следующее: https://jsfiddle.net/rayon_1990/ks3vxomu/ – Rayon
Я вижу угловое в ваших тегах, если вы можете использовать угловые, очень легко сделать асинхронные вызовы с помощью $ http.get, который дает вам обещание (нужный вам объект) – luk492
@RayonDabre, который, кажется, меняет структуру моих данных – binoculars