我知道这是一个重复的问题,但我仍然写我的查询
在循环中出现意外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中创建,因此产生了问题
4条答案
按热度按时间cld4siwp1#
首先,你需要在for循环中添加一个增量。
请提供更多的信息,以帮助您更妥善地您也许可以代码的变通办法,但我需要更多的信息是怎么回事,以帮助您
mpbci0fu2#
如果你想等待多个通过循环(或其他方式)创建的promise,那么你需要将这些promise捕获到
Array
中,然后使用Promise.all
函数。对于在promise解析后发生的一些操作,您需要在所述promise上使用
.then
方法(或者您可以将其移动到单独的异步函数,在那里您相应地等待这两个操作)。ruoxqz4g3#
将async添加到父函数
也通过添加禁用eslint错误
5n0oy7gb4#
假设你使用的是一个样板文件,
Unexpected await inside a loop
是一个eslint
错误(查看here以获取更多关于eslint的信息)。理论上,你的代码是正确的,因为Javascript可以在“简单”循环中处理
waits
。(here和here了解更多信息)