Javascript:global var 不起作用。(使用软件开发工具包。REST.retriveMultipleRecords)



我不明白为什么我不能影响我的全局变量。 我不明白为什么这不起作用..我相信这与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 处仍然不包含任何值,就在执行并完成此数组之后将值此可用

相关内容

  • 没有找到相关文章

最新更新