打字稿異步等待不適用於當前處理NODE js FS的senario。打字稿異步等待不能與FS工作
代碼如下。
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);
}
我已經添加了的await在foreach,但循環繼續,我不循環迭代之前得到的值,而是給出在最後所有的值。
注: 我可以承諾添加到存在於循環,但問題是,它要求每一次無論是文件存在與否,如果該文件不存在,它會嘗試所有的對象多次創建相同的目錄或調用每個時間文件。
我想要它應該檢查文件一次,沒有找到,它應該創建目錄,然後目錄的存在將是真實的,所以它停止創建相同的目錄多muyltiple時間。
'await fs.accessSync(filePath,fs.F_OK);'根本沒有意義。顧名思義,'fs.accessSync'是一個同步函數。 –
避免['Promise' constructor antipattern](http://stackoverflow.com/q/23803743/1048572?What-is-the-promise-construction-antipattern-and-how-to-avoid-it)! – Bergi
此外,你應該[永遠不會傳遞'異步函數'到'Promise'構造函數](http://stackoverflow.com/a/39409757/1048572)和['forEach'不能與'async函數一起使用]( http://stackoverflow.com/q/37576685/1048572) – Bergi