jquery 循环中出现意外等待的警告

polhcujo  于 2023-05-17  发布在  jQuery
关注(0)|答案(4)|浏览(199)

我知道这是一个重复的问题,但我仍然写我的查询
在循环中出现意外await
下面是我的代码

const createChartPanel = async (data) => { 
   let panel = []
   let promises = []
   for (let a = 0.0; a < totalMacroFactorCount; a += /* increment */) {
       //some bunch code here

       let promise = addCharts(/* your arguments */).then(() => {
           panel.push(chartPanel)
       });
       promises.push(promise)
       a = parseFloat(a + 1).toFixed(1);
    }
    await Promise.all(promises)   // await for all promises to finish
    return panel;
}

addChart函数完成前,promises.push(promise)被调用,addChart进程完成后,如何调用promises.push(promise)

const addCharts = async (data, chartTable, barColor, orangeBar, maroonBar, darkBlueBar, chartHeight, isFirstRow) => {
   // some code
    const maxHeight = _.maxBy(_.flatten(modifiedData), 'y');

    const promisesBenchmark = modifiedData.map(async (subArr, index) => {
        const currentChart = await getSVG(index % 2, subArr, isStrScore, maxHeight?.y);
        return currentChart;
    });
    const svgs = await Promise.all(promisesBenchmark);

    let nidx = 0;
    for (const svg of svgs) {
        chartTable[nidx + 1].table.body.push([{
            svg: svg, alignment: 'center', border: [false, false, false, true],
            borderColor: '#41ABE0', borderWidth: 0.5,
            width: chartWidth, height: chartHeight, fillColor: (nidx % 2 ? 'white' : '#f2f2f3')
        }]);
        nidx++;
    }
};

这里SVG图像没有完全在addChart中创建,因此产生了问题

cld4siwp

cld4siwp1#

首先,你需要在for循环中添加一个增量。

for (let a = 0.0; a < totalMacroFactorCount; a++) {//Code}

请提供更多的信息,以帮助您更妥善地您也许可以代码的变通办法,但我需要更多的信息是怎么回事,以帮助您

mpbci0fu

mpbci0fu2#

如果你想等待多个通过循环(或其他方式)创建的promise,那么你需要将这些promise捕获到Array中,然后使用Promise.all函数。
对于在promise解析后发生的一些操作,您需要在所述promise上使用.then方法(或者您可以将其移动到单独的异步函数,在那里您相应地等待这两个操作)。

const createChartPanel = async (data) => { 
   let panel = []
   let promises = []
   for (let a = 0.0; a < totalMacroFactorCount; a += /* increment */) {
       //some bunch code here

       let promise = addCharts(/* your arguments */).then(() => {
           panel.push(chartPanel)
       });
       promises.push(promise)
    }
    await Promise.all(promises)   // await for all promises to finish
    return panel;
}
ruoxqz4g

ruoxqz4g3#

将async添加到父函数

const yourFunc = async () => {
 for (let a = 0.0; a < totalMacroFactorCount; a++) {
  let panel=[]

  //some bunch code here
  await // yourcode

  await addCharts(scenarioNameLoop, tableBody[0],
        barColor, orangeBar, maroonBar, darkBlueBar, 
  chartBodyAndHeight.calculateChartHeight, a === 0);
  panel.push(chartPanel);
 }
}

也通过添加禁用eslint错误

/* eslint-disable no-await-in-loop */
5n0oy7gb

5n0oy7gb4#

假设你使用的是一个样板文件,Unexpected await inside a loop是一个eslint错误(查看here以获取更多关于eslint的信息)。
理论上,你的代码是正确的,因为Javascript可以在“简单”循环中处理waits。(herehere了解更多信息)

相关问题