Это единственный способ (изо всех сил), который я вижу, чтобы реорганизовать ваш код.Это немного бессмысленно, хотя.Вы настроили все неправильно IMO, вы не должны делать это таким образом.Лучший способ сделать это - отправить весь массив одним ajax-запросом в ajax-скрипт, разобраться со всем этим в php (или где-то еще) и выложить его обратно в том формате, который вы хотите в javascript.,В противном случае вам лучше найти лучший способ сделать это.Например, вместо цикла for вы можете получить ajax-запрос, который вызывает вызов функции getData()
при успешном вызове.
// add a global var...
var inLoop;
function getData() {
data = new Array();
for (var seriesData in channels) {
inLoop = true; // set to true
var currentData = new Array();
$.ajax({
type: "GET",
url: 'http://' + serverAddress + ':' + serverPort + '/GetChannelBufferAsJsonp?channelName=' + channels[seriesData] + '&callback=?',
dataType: "json",
async: false,
success: function (json) {
// set inLoop to false to get out of loop below
inLoop = false;
var time = new Date().getTime() + 3600000;
for (var i = 0; i < json.length; i++) {
currentData.push({
x: time + i * 30000,
y: json[i]
});
}
data.push({
id: seriesData,
name: "Production " + seriesData,
data: currentData
});
}, error: function () {
console.log("error", this);
}
});
// loop round this bit for a while
while(inLoop){
// wait
}
}
}
Вот как я бы переписал приведенный выше код:
var channels = {
"first" : "hello world",
"second" : "goodbye world"
}
function getData(channel){
$.ajax({
url: 'http://whatever.com/channel='+channel,
success: function(){
getData(nextchannel);
}
});
}
Чтобы сделать это, вам, возможно, придется подсчитать, сколько раз вы проходите через функцию или что-то еще, чтобы иметь возможность снова передать следующий канал в функцию.