无法理解异步函数中的多个等待状态

时间:2019-11-18 05:35:32

标签: javascript async-await

我编写了此函数,以便从几个目录中的某些svg文件生成png文件。我正在同步执行以下功能,并且按预期方式工作(与以下代码相同,但具有readFileSync),但被告知要重新执行它,以仅使用许用的fs函数。

当前代码会跳过groupA和groupB中的两个文件,以及其交换宽度。例如,我注意到转换函数不会为svg1的{​​{1}}生成,但是会为dirB的{​​{1}}生成,尽管它的宽度与{{1 }},共svg1

大多数文件都能正确转换,但很少能转换。我的猜测是时间上的问题,那么如何在解决问题的同时仍保持fs功能的正确性?

dirA

1 个答案:

答案 0 :(得分:0)

您的代码看起来不错。我没有看到任何明显的现象会导致您描述的行为-您正在等待函数中的每个promise。您没有使用全局变量。

我要说这一行:

['dirA', 'dirB', 'dirC'].map(dir => convertSvgFiles(`src/${dir}`));

最终在具有3个转换器实例的所有3个目录 上并行运行函数。假设转换器中没有与并行相关的错误,那么这应该不会引起任何问题。

但仅出于笑容,请尝试将其更改为:

async function run() {
  for (let d of ['dirA', 'dirB', 'dirC']) {
    await convertSvgFiles(`src/${d}`)
  }
}

run()

强制按顺序扫描文件夹。如果这样可以解决问题,则convert-svg-to-png中存在一个错误。