Что я хочу сделать: при получении массива диалогов я хочу по полученному id получать имя пользователя. Так как функция не сразу возвращает имя, я получаю undefined в нужный мне момент. Как правильно решить такую задачу? Я не знаю как это можно решить callback'ом к сожалению. Разве что при успешной загрузке изменять состояние переменной и если эта переменная изменена, выводить диалоги и имена.
function loadAccountInfo(url) {
var fname_global;
fname_global="nothing :(";
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200) {
fname_global=parseJSON(xmlhttp.responseText);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
return fname_global;
}
function parseJSON(response) {
var arr = JSON.parse(response);
var fName;
fName=arr.response[0].first_name;
return fName;
}
function loadDialogs(url) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState == XMLHttpRequest.DONE && xmlhttp.status == 200) {
parseJSON3(xmlhttp.responseText);
}
}
xmlhttp.open("GET", url, true);
xmlhttp.send();
}
var dialogArray = new Array();
function parseJSON3(response) {
console.log(response);
console.log("dialogs: ");
var arr = JSON.parse(response);
for(var i = 1; i < arr.response[0]; i++) {
try {
console.info('uid' in arr.response[i], " № "+i);
dialogArray.push({uid:arr.response[i].uid,
body:arr.response[i].body,
mid:arr.response[i].mid,
read_state:arr.response[i].read_state,
out:arr.response[i].out,
date:arr.response[i].date,
title:arr.response[i].title
});
}
catch (e) {
console.log("Debug warning");
}
}
var name;
var nameArray=new Array();
for(var i = 1; i < 15; i++) {
name=loadAccountInfo("https://api.vk.com/method/users.get?user_id="+dialogArray[i].uid);
}
for(var i = 1; i < 15; i++)
nameArray.push(name);
for(var i = 1; i < 15; i++)
console.log(name+" "+dialogArray[i].body+" "+dialogArray[i].date);
}