gpt4 book ai didi

javascript - 无法在函数外部访问数组

转载 作者:行者123 更新时间:2023-11-28 00:06:38 25 4
gpt4 key购买 nike

我正在尝试使用全局数组来存储一些数据,以便在以后的类(class)中使用。

但是,当我运行 Chrome 调试器控制台时,推送函数不会将它们添加到关联的数组中,也不会收到任何错误。

我看过很多其他例子,但看不出我哪里出了问题。

有人可以告诉我哪里出错了吗?

JavaScript:

var hv = ['1', '2', '3', '4'];

$(document).ready(function () {
for (var i = 0; i < hv.length; i++) {
GetVmsOnHyper(hv[i]);
}
});

function GetVmsOnHyper(id) {
$.ajax({
type: "GET",
url: "/api/function/" + id,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: virtualmachineinfo
})
}

var avrg_mem = [];
var avrg_cpu = [];
var avrg_lng = [];

function virtualmachineinfo(vmData) {

var vmcount = vmData.length;
avrg_lng.push(vmcount);

var mem_size = "medium";
var cpu_size = "medium";
for (var i = 0; i < vmData.length; i++) {
var vm_mem = vmData[i].memory;

if (vm_mem > 6143) {
mem_size = "large";
}
else if (vm_mem < 2047) {
mem_size = "small";
}
avrg_mem.push(mem_size);

var vm_cpu = vmData[i].cpus;

if (vm_cpu > 4) {
cpu_size = "large";
}
else if (vm_cpu < 2) {
cpu_size = "medium";
}
avrg_cpu.push(cpu_size);
}

解决方案

这不是一个解决方案,而是构建一个函数来检查数组的内容,而不是仅仅按照 Chrome 调试控制台告诉我的内容显示代码正在运行。

在末尾添加以下内容进行检查:

function checkArrays() {
for (i = 0; i < avrg_mem.length; i++) {
var whatis = avrg_mem[i];
}

最佳答案

您的数组已正确更新。你可以在示例中看到它(之前打开控制台),我用类似的逻辑函数替换了ajax函数: https://jsfiddle.net/gzfLL0uv/

var hv = ['1', '2', '3', '4'];

$(document).ready(function () {
for (var i = 0; i < hv.length; i++) {
GetVmsOnHyper(hv[i]);
}
});

function GetVmsOnHyper(id) {

setTimeout(function() {
virtualmachineinfo([{memory: id * 100, cpus: 111},
{memory: id * 100, cpus: 222},
{memory: id * 100, cpus: 333}]);
}, 1000);
}

var avrg_mem = [];
var avrg_cpu = [];
var avrg_lng = [];

function virtualmachineinfo(vmData) {

var vmcount = vmData.length;
avrg_lng.push(vmcount);

var mem_size = "medium";
var cpu_size = "medium";
for (var i = 0; i < vmData.length; i++) {

//console.log(i);
var vm_mem = vmData[i].memory;

if (vm_mem > 6143) {
mem_size = "large";
}
else if (vm_mem < 2047) {
mem_size = "small";
}
avrg_mem.push(mem_size);

var vm_cpu = vmData[i].cpus;

if (vm_cpu > 4) {
cpu_size = "large";
}
else if (vm_cpu < 2) {
cpu_size = "medium";


}
avrg_cpu.push(cpu_size);
}

console.log(avrg_lng);
}

如果您尝试在代码中的 virtualmachineinfo 函数之后检查数组,您可能会感到困惑,因为数组是空的。您只需在 virtualmachineinfo 函数中执行此操作,因为您的代码的工作原理如下:

  1. 首先初始化函数和变量
  2. 注册观察 DOM 就绪事件
  3. 处理此事件并迭代hv变量,其中调用GetVmsOnHyper并在ajax请求上注册新事件将得到解决
  4. 异步调用virtualmachineinfo函数四次。

因此,在最后一点之后,您的数组将被所有值填充。

您应该在 Jquery 库中使用 Promises 或 Defer 来捕捉所有 ajax 请求得到解决的时刻。

关于javascript - 无法在函数外部访问数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31286580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com