我不明白为什么我不能影响我的全局变量。 我不明白为什么这不起作用..我相信这与SDK有关。REST.retriveMultipleRecords,但我不明白如何。正如您在第一个警报中看到的那样,它可以工作。但在第 2 个中,它显示为"未定义"。在这个小提琴中,我有一个关于定义全局变量的简单示例,它有效。
任何人都可以帮助解决这个问题吗?为什么它不会影响我的全局变量?
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]);
}
}
尝试alert(Players[1]);
alert(Players[0]);
您的数据是异步检索的,因此它在执行 setPlayers 函数后的某个时间可用,因此在alert(Players[1])
运行后的一段时间内可用。
下面是一些验证它的代码:
setTimeout(function(){ alert(Players[1]) }, 3000); // check the variable after 3 seconds
您需要在成功处理程序(填充 Player 数组的函数)执行后使用数据。您可以研究 Promise 模式,该模式为异步编程提供了更传统的接口。
认为应该是因为内部函数尚未执行,因此数组在位置 1 处仍然不包含任何值,就在执行并完成此数组之后将值此可用