您可以在没有其他库的情况下使用递归来执行此操作。下面的代码将从一个数组中复制文件,等待前一个文件完成复制,然后再异步移动到下一个。
使用fs.readFile() 和fs.writeFile() 的方法
const fs = require('fs')
const path = require('path')
// your files array
let files = [f1, f2]
function copyFile (index, cb) {
let file = files[index]
let dest = path.join('/tmp', file.path)
if (!file) {
// done copying
return cb(null)
}
fs.readFile(file.path, (err, data) => {
if (err) {
// return callback with error
return cb(err)
} else {
fs.writeFile(dest, data, (err) => {
if (err) {
return cb(err)
} else {
copyFile(index + 1, cb)
}
})
}
})
}
copyFile(0, (err) => {
if (err) {
// Handle Error
console.log(err)
} else {
console.log('Files Copied Successfully!')
}
})
使用流的方法,我认为更好
const fs = require('fs')
const path = require('path')
// your files array
let files = [f1, f2]
function copyFile(index, cb) {
let file = files[index]
let dest = path.join('/tmp', file.path)
if (!file) {
return cb(null)
}
let source = fs.createReadStream(file.path)
let copy = fs.createWriteStream(dest)
source.on('error', err => {
// explicitly close writer
copy.end()
return cb(err)
})
copy.on('error', err => {
return cb(err)
})
copy.on('finish', () => {
copyFile(index + 1, cb)
})
source.pipe(copy)
}
copyFile(0, (err) => {
if (err) {
// Handle Error
console.log(err)
} else {
console.log('Files Copied Successfully!')
}
})