typescript async等待等待与当前与节点JS FS的senario一起使用。
遵循代码。
public static FileExists(filePath: string): Promise<boolean> {
return new Promise<boolean>(async (resol, reje) => {
try {
fs.accessSync(filePath, fs.F_OK);
resol(true);
}
catch (e) {
resol(false);
}
});
}
public static async CreateDirectory(name: string): Promise<boolean> {
return new Promise<boolean>(async (resolve, reject) => {
let dirExist: boolean = await FileManager.FileExists(name);
try {
if (!dirExist) {
fs.mkdirSync(name);
}
resolve(true);
} catch (e) {
resolve(false);
}
});
for (var i = 0; i < paths.length; i++) {
var element = paths[i];
fullPath += element + "/";
let a = await FileManager.CreateDirectory(fullPath);
console.log(fullPath);
}
我在foreach中添加了等待的等待,但是循环仍在继续,我在循环迭代之前没有获得价值,而是给出了所有值。
注意:我可以向循环中存在的所有对象添加承诺,但问题是它每次都存在或不存在文件时都会调用,如果文件不存在,它会尝试多次创建相同的目录或每个文件存在时间文件。
我想要的是应该检查一次文件一次并且找不到的文件,它应该创建目录,之后目录存在将是正确的,因此它会停止创建相同的目录多个usyyltipter。
您需要正确地授权 asynchronous 文件系统方法,因此您不能使用accessSync
和mkdirSync
(或者您可以使用它们,但随后可以使用它们,但是async
函数将会使用毫无意义)。
而是做
public static fileExists(filePath: string): Promise<boolean> {
return new Promise<boolean>(async resolve => {
fs.accessSync(filePath, fs.F_OK, err => {
if (err) resolve(false);
else resolve(true);
});
});
}
public static async createDirectory(name: string): Promise<boolean> {
if (!await this.fileExists(name)) {
await new Promise(async (resolve, reject) => {
fs.mkdir(name, err => {
if (err) reject(err);
else resolve();
});
});
}
return true;
}
var fullPath = ""
for (var element of paths)
fullPath += element + "/";
let a = await FileManager.createDirectory(fullPath);
console.log(fullPath);
}
但是,请注意,使用fs.access
在不建议采取操作之前检查。您应该只是发现错误:
public static createDirectory(name: string): Promise<boolean> {
return new Promise(async (resolve, reject) => {
fs.mkdir(name, err => {
if (err) reject(err);
else resolve();
});
}).then(() => true, err => {
if (err.code == "EEXIST") return false;
else throw err;
});
}