861180
谢谢各位,问题已解决,可以看3楼,说的很清楚。
在使用fs包一层promise后,使用async await执行,导致顺序错乱,log也不打,只会执行一次fs方法,下面是输出和代码
D:\code\mygitali\nodestudy>node index.js
开始创建文件夹
D:\code\mygitali\nodestudy>node index.js
开始删除文件夹
D:\code\mygitali\nodestudy>node index.js
开始创建文件夹
D:\code\mygitali\nodestudy>node index.js
开始删除文件夹
await-fs.js
const fs = require('fs');
const ab = ['access', 'rename', 'ftruncate', 'chown', 'lchown', 'cmod', 'fchmod', 'stat', 'lstat', 'fstat', 'link', 'symlink',
'readlink', 'realpath', 'unlink', 'rmdir', 'readdir', 'close', 'open', 'utimes',
'futimes', 'fsync', 'write', 'read', 'readFile', 'writeFile', 'appendFile', 'mkdir', 'mkdtemp']
// fchown fdatasync mkdtemp rename truncate
ab.forEach(name => {
if (!fs[name])return;
exports[name] = (...n) => {
return new Promise((res, rej) => {
fs[name](...n, (er, d) => {
if (er) rej(er)
if (d) res(d)
})
})
}
})
exports.exists = (path) => {
return new Promise((res, rej) => {
fs.exists(path, (exists) => {
res(exists);
})
});
}
index.js
const fs = require('./await-fs');
const run = async () => {
try {
let path = './lib';
// 判断有没有lib文件夹
let exists = await fs.exists(path);
if (exists) {
console.log('开始删除文件夹')
// 删除文件夹
let re1s =await fs.rmdir(path);
console.log('删除文件夹完成',re1s)
}
console.log('开始创建文件夹')
// 创建文件夹
let res = await fs.mkdir('./lib');
console.log('创建文件夹完成', res)
console.log('开始创建文件')
await fs.writeFile('./lib/1.txt', '大哥', 'utf8');
console.log('创建文件夹完成')
}
catch (err) {
console.log(err)
}
}
run()