您可以使用递归来在没有其他库的情况下执行此操作。下面的代码将复制Array中的文件,等待前一个文件完成复制,然后再异步移动到下一个文件。
方法使用流使用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!')
}
})
运作良好。我会拿起你的答案。非常感谢! – user180574