第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在順序循環(huán)中修改多個Highcharts

在順序循環(huán)中修改多個Highcharts

湖上湖 2021-03-31 12:19:09
我目前在給定頁面上有大約14個以上的股票圖表的環(huán)境中工作(每個圖表都有20,0000+個唯一數(shù)據(jù)點,還有更多)。我有某些全局“切換”,例如,影響顯示的系列,圖表選項或極限軸(在所有圖表上)。鑒于一次只對用戶可見一個圖表,我想將更新圖表視為一個隊列,在該隊列中,我先更新一個圖表,然后再更新另一個,依此類推。我的目標(biāo)是:依次循環(huán)調(diào)用Highcharts.Chart.redraw()(即,一次對頁面中的每個圖表調(diào)用一次重繪-以便首先重繪圖表列表中的第一個圖表)。請注意,圖表列表的順序是動態(tài)創(chuàng)建的,已經(jīng)處理完畢。我已經(jīng)嘗試了許多解決方案,并認為問題圍繞使Highcharts重繪功能-或調(diào)用該功能的動作(如Chart.update(),Series.setVisible(),Axis.setExtremes())-兌現(xiàn)承諾。我在這里上傳了一些外殼程序,可讓您觸發(fā)事件,并且可以看到每個圖表實際上是一次更新的。例如,如下所示:$(Highcharts.charts).each(function(i, chart) {    console.log(i);    // decide what to do with the chart    // update Series, Chart options, Axis extremes... etc.    chart.redraw(); // call redraw at the end})將輸出:> 1, 2, 3, ..., n // pause, then charts would redraw()可能需要提及的是,盡管上述內(nèi)容似乎具有響應(yīng)性,但在我的環(huán)境中,單擊切換按鈕到圖表的重繪事件完成之間可能會有2-5秒的延遲。我不知道的是如何使循環(huán)等待每個圖表完成其重繪,然后再繼續(xù)執(zhí)行列表中的下一個圖表??梢蕴峁┑娜魏螏椭鷮⒉粍俑屑?。
查看完整描述

2 回答

?
翻翻過去那場雪

TA貢獻2065條經(jīng)驗 獲得超14個贊

如果我明白您的意思,則可以通過將觸發(fā)器中的代碼包裝在setTimeout(超時值為0)中,然后包裝在新的Promise中來實現(xiàn)


使用async / await就像


$('#trigger').click(async (e) => {

    for (let chart of Highcharts.charts) {

        await new Promise(resolve => setTimeout(() => {

            chart.series.forEach(series => series.setVisible(undefined, false));

            chart.redraw();

            resolve();

        }, 0));

    }

});


查看完整回答
反對 回復(fù) 2021-04-08
?
MYYA

TA貢獻1868條經(jīng)驗 獲得超4個贊

一般解決方案


通常,如果您要在循環(huán)中順序地鏈接promise,可以使用以下格式


function promiseChain(i) {

    return new Promise(resolve => {

        /* DO ASYNC STUFF */


        // Resolve with some result if the next item in the chain needs it

        return resolve("OK");

    });

}


let p = Promise.resolve(null);


for (let i = 0; i < 5; i++) {

    p = p.then(prevResult => {

        if (prevResult) {

            // Do stuff with prevResult if needed

        }


        // Chain next item

        return promiseChain(i);

    });

}

日志示例


這將記錄0-4,一次記錄一次,每次間隔等待一秒鐘。


function promiseChain(i) {

    return new Promise(resolve => {

        setTimeout(() => {

            console.log(i);

            return resolve("OK");

        }, 1000)

    });

}


let p = Promise.resolve(null);


for (let i = 0; i < 5; i++) {

    p = p.then(prevResult => {

        if (prevResult) {

            // Do stuff with prevResult if needed

        }


        return promiseChain(i);

    });

}


查看完整回答
反對 回復(fù) 2021-04-08
  • 2 回答
  • 0 關(guān)注
  • 277 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號