我正在学习 Node.js,但不明白为什么它不起作用。问题是什么?谢谢你的回答。
const fs = require('fs')
const path = require('path')
try {
fs.mkdir(path.join(__dirname, '/test'), {}, err => {
console.log(err)
if (err) throw err
})
}
catch (err) {
console.log('file is already created')
}
这是结果:
Error: EEXIST: file already exists, mkdir 'c:\Users\stefa\Desktop\programming\learning-node\playground\paths\test'
最佳答案
由 err => {/**/}
的 lambda 表达式创建的回调是异步运行的。 try-catch
无法捕获。
您应该使用Promise
s/Future
s 或fs.mkdir
函数的同步版本,fs.mkdirSync
.
尝试这样的事情:
const fs = require('fs')
const path = require('path')
try {
fs.mkdirSync(path.join(__dirname, '/test'));
}
catch (err) {
console.log('file is already created')
}
或
const fs = require('fs');
const path = require('path');
const util = require('util');
const mkdirPromisifed = util.promisify(fs.mkdir);
(async() {
// ... all other code also should be written in async manner ...
try {
await mkdirPromisifed(path.join(__dirname, '/test'));
}
catch (err) {
console.log('file is already created')
}
}());
关于javascript - 为什么在这种情况下 try and catch 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56724037/