Node.js 创建或使用现有目录时避免竞争条件
示例
由于Node的异步特性,请首先创建或使用目录:
用检查它的存在,然后fs.stat()
根据存在检查的结果来创建或使用它,
如果在检查时间到创建时间之间创建了文件夹,则可能导致竞争状态。下面的方法进行包装,并在捕捉错误的包装器中进行包装,以使异常通过(如果已存在)其代码。如果错误是其他错误,例如(拒绝通过),则像本机函数一样抛出或传递错误。fs.mkdir()fs.mkdirSync()EEXISTEPERM
异步版本fs.mkdir()
var fs = require('fs');
function mkdir (dirPath, callback) {
fs.mkdir(dirPath, (err) => {
callback(err &&err.code!== 'EEXIST' ? err : null);
});
}
mkdir('./existingDir', (err) => {
if (err)
return console.error(err.code);
//在这里使用`。/existingDir`
});同步版本fs.mkdirSync()
function mkdirSync (dirPath) {
try {
fs.mkdirSync(dirPath);
} catch(e) {
if (e.code!== 'EEXIST' ) throw e;
}
}
mkdirSync('./existing-dir');
//现在用`。/existing-dir`做点什么