我正在编写一个函数createFile
,用于在一个目录中创建一个文件,除非该文件已经存在。我使用Node.js原生fs
包来执行所有文件操作。我想让我的函数异步,所以我把所有的fs
函数都包装在promises中:
function writeFilePromise(writePath, textContent) {
return new Promise((resolve, reject) => {
fs.writeFile(writePath, textContent, (err) => {
reject();
});
resolve();
});
}
function mkDirPromise(dir) {
return new Promise(((resolve, reject) => {
fs.mkdir(path.join(constants.FILES_STORAGE_DIR, dir), (err) => {
reject(err);
});
resolve();
}));
}
然后我还想在promise中包装fs.existsSync
,以完成我的功能,但包装它偶尔会导致不正确的行为,也就是说,如果文件的目录不存在,而我想创建一个目录,则创建的目录将是空的,而不会创建文件。通过调试,我发现只有同步fs.existsSync
才能工作,并且始终是。这是函数代码:
function createFile(dir, fileName, httpMethod, textContent) {
return new Promise(((resolve, reject) => {
const searchPath = path.join(ROOT_DIR, dir, fileName);
if (httpMethod === POST && fs.existsSync(searchPath)) {
reject();
} else {
const fileExistsStatus = fs.existsSync(path.join(ROOT_DIR, dir));
(async function fsOperations() {
try {
if (!fileExistsStatus) {
await mkDirPromise(dir);
}
await writeFilePromise(searchPath, textContent);
resolve();
} catch (err) {
reject(err);
}
}());
}
}));
}
我遗漏了什么?我怎样才能把我的函数变成真正的异步函数?
https://stackoverflow.com/questions/50767829
复制相似问题