【发布时间】:2017-05-11 00:24:50
【问题描述】:
typescript async await 不适用于当前处理 NODE 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 中添加了 await,但循环继续,在循环迭代之前我没有得到 a 的值,而是在最后给出了所有值。
注意: 我可以将承诺添加到循环中存在的所有对象,但问题是每次文件存在或不存在时它都会调用,如果文件不存在,它会尝试多次创建相同的目录或每个调用存在的时间文件。
我希望它应该检查一次文件但没有找到,它应该创建目录,然后目录存在将是真实的,因此它将停止多次创建同一个目录。
【问题讨论】:
-
await fs.accessSync(filePath, fs.F_OK);完全没有意义。顾名思义,fs.accessSync是一个同步函数。 -
@T.J.Crowder 谢谢,我已经改了,但还是有同样的问题
-
@Bergi 我现在已经更改并维护了所有延迟状态,请您举个例子来解决这个问题,以便我更好地理解反模式
标签: javascript node.js asynchronous typescript