javascript - 在循环内调用异步函数

标签 javascript jquery asynchronous highcharts

我有一个对象图表

 var charts = {
        chart1 : function (){
            return {
                key1 : value1,
                key2: value2,
                key3, value3
            }
        },
        chart2 : function(){
            return {
                key1 : value1,
                key2: value2,
                key3, value3
            }
        },
        chart3 : function(){
            return {
                key1 : value1,
                key2: value2,
                key3, value3
            }
        } 
    }

函数回调

function callback(instance){
    .....
    .....
}

我可以像这样绘制图表chart1

var chart = new Highcharts.Chart(charts.chart1(),callback);
// callback is a function which gets called when drawing of chart is completed.

以及所有像这样的图表,

 for(chart in charts){
        if(charts.hasOwnProperty(chart)){
            new Highcharts.Chart(charts.chart(),callback);
        }
    }

但是,同时绘制大量图表会使 Firefox 挂起。 因此,我想在上一个图表的回调中逐个调用图表。 (绘制完一张后,再绘制第二张,依此类推...)

我可以通过创建一个包含每个图表名称的数组来实现这一点。在回调函数中,我将增加索引并调用下一个图表。

问题来了

如何在不手动创建图表名称列表的情况下绘制所有图表?

最佳答案

您可以创建对象中所有键的可迭代数组,然后在构建每个图表时逐一循环遍历它们:

function makeAllCharts() {
    // make list of charts
    var chartList = [], pos = 0;
    for (chart in charts) {
        chartList.push(chart);
    }

    function nextChart() {
        if (pos < chartList.length) {
            var key = chartList[pos++];
            new Highcharts.Chart(charts[key](), function() {
                callback();
                nextChart();
            });
        }
    } 
    nextChart();
}

因为如果没有 for (x in y) 循环,您无法直接从对象一次迭代一个键列表,因此您确实需要创建可迭代的中间数组通过增加索引。

关于javascript - 在循环内调用异步函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10959123/

相关文章:

javascript - 将 href 文本传输到文本框

javascript - 如何在按下 F5 或刷新按钮时仅刷新页面的一部分

jQuery 非 AJAX POST

java - Dropwizard 相当于 Spring 的 @Async

javascript - Javascript 中的这个命名空间函数有什么作用?

javascript - 两个 onClick() 事件同时发生?

jquery - Jssor Slider 将导航器编号替换为项目符号

jquery - 无法在 Cygwin 上运行 CoffeeScript

javascript - 将异步函数中的数组添加到传单 react 中不起作用

unit-testing - 编写单元测试以检查事件是否被触发