仅当目标文件不存在时,我才尝试在 Node.js 中异步重命名文件。
我做了一个如下的快速测试:
const fs = require('fs')
const files = [ 'file1', 'file2', 'file3' ]
const new_name = 'new-name' // same destination name for all
fs.exists() - 已弃用
for (let file of files)
fs.exists(new_name, (exists) => {
if (!exists) fs.rename(file, new_name, (err) => {})
})
fs.access() - 推荐
for (let file of files)
fs.access(new_name, fs.constants.F_OK, (err) => {
if (err) fs.rename(file, new_name, (err) => {})
})
const fs_extra = require('fs-extra')
for (let file of files)
fs_extra.move(file, new_name, { overwrite: false }, (err) => {})
每次所有 3 个文件都被覆盖并重命名为一个文件。
我相信会发生这种情况,因为所有exists
检查都比任何发生都更早触发rename
。
我知道如何同步完成这项任务,但想确保没有适当的异步方式来做到这一点。