在函数

时间:2015-07-08 07:49:22

标签: javascript arrays

我正在尝试使用全局数组存储一些数据,以便在以后的课程中使用。

然而,当我运行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];
    }

1 个答案:

答案 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 函数中执行此操作,因为您的代码的工作原理如下:

  1. 首先启动函数和变量
  2. 注册以观察DOM就绪事件
  3. 处理此事件并迭代 hv 变量,其中调用 GetVmsOnHyper 并在ajax请求上注册新事件将被解析
  4. 异步调用 virtualmachineinfo 函数四次。
  5. 因此,在最后一点之后,您的数组将被所有值填充。

    您应该使用 Promises 或在Jquery lib中推迟捕获所有ajax请求将被解析的时刻。