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));
}
});

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);
});
}
添加回答
舉報