Javascript: глобальная переменная не работает. (используя SDK.REST.retriveMultipleRecords)
Я не понимаю, почему я не могу повлиять на мою глобальную переменную. Я не понимаю, почему это не работает.. Я считаю, что это связано с SDK.REST.retriveMultipleRecords, но я не понимаю, как. Как вы можете видеть в первом предупреждении, это работает. но во 2-ом это показывает как "неопределенный". В этой скрипте у меня есть простой пример определения глобальной переменной, и она работает.
Кто-нибудь может помочь с этим вопросом? Почему это не влияет на мой globalVar?
Players = new Array(); //GLOBAL VAR
function setPlayers(topNumber){
SDK.REST.retrieveMultipleRecords(
"gamify_utilizador",
"$select=gamify_utilizadorId,gamify_name,gamify_Ranking&$top="+topNumber+"&$orderby=gamify_Ranking asc",
function (results) {
if(results.length > 0){
for(var i = 0;i<results.length;i++){
Players.push(new Array(results[i].gamify_utilizadorId, results[i].gamify_name));
alert(Players[i]); // ALERT OK
}
}
else {
alert("No Contact records are available to set as the primary contact for the account.");
}
},
errorHandler,
function () {
//OnComplete handler
}
)
alert(Players[1]); // Alert says "Undefined"
};
document.onreadystatechange = function () {
if (document.readyState == "complete") {
setPlayers(4);
alert(Players[1]);
}
}
3 ответа
Думаю, так и должно быть, потому что внутренняя функция еще не была выполнена, и, таким образом, массив все еще не содержит значения в позиции 1, сразу после того, как выполнение и завершение этого массива будет определять это доступное значение
Ваши данные извлекаются асинхронно, поэтому они доступны через некоторое время после выполнения функции setPlayers и, следовательно, через некоторое время после alert(Players[1])
пробеги.
Вот некоторый код, который подтверждает это:
setTimeout(function(){ alert(Players[1]) }, 3000); // check the variable after 3 seconds
Вам необходимо использовать данные после выполнения обработчика успеха (функция, которая заполняет массив Players). Вы можете взглянуть на шаблон Promises, который предлагает более традиционный интерфейс для асинхронного программирования.