javascript - 为什么在这种情况下 try and catch 不起作用?

标签 javascript node.js

我正在学习 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 无法捕获。

您应该使用Promises/Futures 或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/

相关文章:

javascript - if 数组元素在 for 循环内有条件

javascript - IE 中的“无效参数”错误,行号不存在

javascript - 链接 js-cookie : Uncaught ReferenceError: module is not defined 时出现 Firefox 和 Chrome 错误

javascript - 在 Angular 4/TypeScript 中创建新的 Javascript 对象发送 json 接收 json

javascript - 如何使用 javascript 定位并单击 iFrame 中的元素

javascript - Ryan Dahl 的 Node 聊天

node.js - Keystone.js 管理 UI - 表单中没有字段

node.js - 使用自定义 header 测试 NodeJS socket.io

node.js - 如何在没有 Yeoman 的情况下创建 npm 项目生成器

javascript - 创建空字符串数组?