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

Javascript 无法理解异步函数中的多个等待,javascript,async-await,Javascript,Async Await,我编写这个函数是为了从几个目录中的一些svg文件生成png文件。我正在同步执行下面的功能,并且它按照预期工作(与下面的代码相同,但使用readFileSync),但被告知重新执行,以便仅使用promisified fs函数 当前代码跳过groupA和groupB中的两个文件,以及其交换宽度。例如,我注意到转换函数不会为dirB的svg1生成,但会为dirA的svg1生成,尽管它的宽度与dirB的svg1不匹配 大多数文件转换正确,但少数文件不能。我猜这是一个时间问题,那么如何在保证fs功能的同时

我编写这个函数是为了从几个目录中的一些svg文件生成png文件。我正在同步执行下面的功能,并且它按照预期工作(与下面的代码相同,但使用readFileSync),但被告知重新执行,以便仅使用promisified fs函数

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

大多数文件转换正确,但少数文件不能。我猜这是一个时间问题,那么如何在保证fs功能的同时解决这个问题呢

const { createConverter } = require('convert-svg-to-png');
const fs = require('fs');
const path = require('path');
const util = require('util');

const readdir = util.promisify(fs.readdir);
const readFile = util.promisify(fs.readFile);

async function convertSvgFiles(dirPath) {
  const converter = createConverter();

  try {
    const files = await readdir(dirPath);

    for (let file of files) {
      const currentFile = path.join(dirPath, fil);

      const fileContents = await readFile(currentFile);
      const fileWidth = fileContents.toString('utf8').match(\*regex capture viewbox width*\);

      await converter.convertFile(currentFile, { width: fileWidth });
    }
  } catch (err) {
    console.warn('Error while converting a file to png', '\n', err);
  } finally {
    await converter.destroy();
  }
}

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


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

我会说这句话:

['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()

强制按顺序扫描文件夹。如果这解决了问题,那么在
将svg转换为png

中就有一个错误。您是否尝试过使用
Promise.all