我正在尝试使用全局数组存储一些数据,以便在以后的课程中使用。
然而,当我运行chrome调试器控制台时,push函数不会将它们添加到相关联的数组中,也不会出现任何错误。
我看了很多其他的例子,看不出我出错的地方。
有人能告诉我哪里出错了吗?
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];
}
答案 0 :(得分:1)
您的阵列已正确更新。 您可以在示例中看到它(之前打开控制台),我用类似的逻辑函数替换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 函数中执行此操作,因为您的代码的工作原理如下:
因此,在最后一点之后,您的数组将被所有值填充。
您应该使用 Promises 或在Jquery lib中推迟捕获所有ajax请求将被解析的时刻。