我尝试制作一个简单的脚本,如果它不存在则创建一个文件夹。我读了一些文章并制作了这样的逻辑:
debug("before async");
(async () => {
if(!fs.existsSync(outputPath)){
debug("Folder not exsists! path: "+outputPath)
try{
return await fs.mkdir(outputPath)
}catch(err){
debug(err)
}
}
res.send('<h1>Hello world!</h1>')
})()
我收到了一个错误:
(node:27611) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.
确定。我想了一下,并提醒来自stackoverflow的那个人告诉我将回调功能作为promisify。我试着去做:
const mkdir = util.promisify(fs.mkdir);
debug("Before async");
(async () => {
if(!fs.existsSync(outputPath)){
debug("Folder not exsists! path: "+outputPath)
await Promise.all(mkdir(outputPath))
}
res.send('<h1>Hello world!</h1>')
})()
但我还有其他错误:
UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 3): TypeError: undefined is not a function
我该怎么做?如果你知道任何可以帮助我理解异步功能的指南 - 这将是很棒的。谢谢!
btw,双向文件夹已创建。但有错误......
答案 0 :(得分:2)
节点11.x.x及更高版本
await fs.promises.mkdir( '/path/mydir' );
答案 1 :(得分:1)
你不能/不需要使用Promise.all
因为你只处理一个承诺,只是做
await mkdir(outputPath)
除此之外,你真的应该为你的代码添加一些错误处理。
答案 2 :(得分:1)
Promise.all
用于运行一系列承诺。在您的情况下,您可以这样做:
await mkdir(outputPath)
根据您的需要,您可能会执行以下操作:
await Promise.all([mkdir(path1), mkdir(path2), mkdir(path3)])
我建议在跳转到异步/等待之前熟悉回调和承诺。
答案 3 :(得分:0)
异步检查文件夹是否存在,如果不存在则创建一个。从Node.js ^ 10.20.1开始工作。
const fsPromises = require("fs").promises;
async function createDir(dir) {
try {
await fsPromises.access(dir, fs.constants.F_OK);
} catch (e) {
await fsPromises.mkdir(dir);
}
}