在 NodeJS 中写入文件的同步与异步

Sync vs async for file write in NodeJS

我最近听说同步功能在使用时会完全阻止应用程序。这就是为什么我想将下面代码的功能转换为异步。 我收到一个优化图像,将文件保存为 .webp 格式并删除旧的未优化图像。之后新的 user_file 会立即保存到数据库中。

fs.writeFileSync(req.file.path + '.webp', data);
user_file = user_file + '.webp';
fs.unlinkSync(req.file.path);

如果我只是像这样将它转换为异步,它就会继续并插入旧的 user_file:

fs.writeFile(req.file.path + '.webp', data, err => {
  if (err) {
    console.error(err);
    return;
  }
  fs.unlink(req.file.path, (err) => {
    if (err) {
      console.error(err);
      return;
    }
    user_file = user_file + '.webp';
  });
});  // I could just put user_file = user_file + '.webp'; here but I also want to make sure that it was successfully saved before moving on

如何保持这种异步,但仍然等待功能完全完成,然后再继续进行数据库插入?

使用 fs.Promises API 而不是带有回调的经典。

await fsPromises.writeFile(req.file.path + '.webp', data)