当前位置: 首页 > 知识库问答 >
问题:

尝试/捕获未捕获快速异步函数中的所有错误?

闽高峯
2023-03-14

我有以下代码。

然而,它没有捕捉到所有的错误,我仍然得到“throw er//未处理的“错误”事件。

这是为什么呢?

app.post('/api/properties/zip/:zip/bedrooms/:bedrooms', async (req, res, next) => {
  try {
    const file = await apiCall(req.params.zip, req.params.bedrooms);
    const records = await parse(file);
    const seq = await sequelize();
    const result = await dbImport(seq, records);
    return await res.status(200).json(`${result.length} properties successfully imported to the database`);
  } catch (err) {
    return next(err);
  }
});

// Middleware error handling
app.use((err, req, res, next) => {
  console.error(err.message);
  if (!err.statusCode) err.statusCode = 500;
  return res.status(err.statusCode).json(err.message);
});

例如,直到我添加了一个特定的错误处理程序,它才捕获parse()函数中的错误。即使不添加,我的try/catch是否应该捕获此错误?

const fs = require('fs');

const parse = filename => new Promise(((resolve, reject) => {
  // Converts a line from the file, parses it to JSON, and stores it an array
  const func = (data, records) => {
    const json = JSON.parse(data);
    records.push(json);
  };

  // Read in each line of the file and pass that line to func
  const readLines = (input) => {
    const records = [];
    let remaining = '';


    // ******** HAD TO ADD THIS *********
    input.on('error', (err) => {
      reject(err);
    });


    input.on('data', (data) => {
      remaining += data;
      let index = remaining.indexOf('\n');
      let last = 0;
      while (index > -1) {
        const line = remaining.substring(last, index);
        last = index + 1;
        func(line, records);
        index = remaining.indexOf('\n', last);
      }
      remaining = remaining.substring(last);
    });

    input.on('end', () => {
      if (remaining.length > 0) {
        func(remaining, records);
      }
      resolve(records);
    });
  };

  const input = fs.createReadStream(filename);
  readLines(input, func);
}));

module.exports = parse;

提前致谢!

共有1个答案

田英卓
2023-03-14

也许这将向您演示在使用等待时如何使用try/catch。当一个promise<code>被拒绝

(async () => {
  try {
    const val1 = await Promise.resolve('resolved val');
    const val2 = await Promise.reject('reject val');
    console.log(val1);
  } catch (err) {
    console.error(err);
  }
})();
 类似资料:
  • 有可能在SWIFT中捕捉异常吗?给定以下代码: 有可能防止异常使整个程序崩溃吗?也就是说,在Objective-C中,与以下内容相对应的Swift等价是什么:

  • 我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。

  • 我目前在我的路由中使用dotry/doCatch块,因此我无法使用全局onException块。 然而,如果驼峰路由中断(由于错误代码或意外/未测试的场景),我希望执行一些业务逻辑。希望这永远不会发生,但我仍然想处理更糟糕的情况。 我不能在全局OneException块中有java.lang.Exception,而且,我不想在每个路由上都添加一个额外的捕获。 在抛出未捕获的异常和中断路由之前,是否

  • 我正在与async Wait try catch块斗争几天。 这个异步函数中的try-catch是否正确? 这就是我创建自定义错误类并全局导出的方式。 要求: 故意换了工作。我想找份工作。国际直拨电话 这样我就能抓住错误。如果有错误,则抛出新创建的自定义错误类。但抛出队列错误将导致日志记录 同样,即使不需要捕捉那个里的错误,因为try块在工作,若我抛出QueueError,我只想捕捉最后一个cat

  • 问题内容: 我正在研究节点7异步/等待功能,并不断跨这样的代码绊脚 这似乎是使用异步/等待解决/拒绝或返回/抛出的唯一可能性,但是,v8不会在try / catch块中优化代码吗? 有其他选择吗? 问题答案: 备择方案 替代方法: 显式地使用诺言将是这样的: 或类似的东西,使用延续传递样式: 原始例子 您的原始代码所做的是暂停执行并等待由其返回的诺言解决。然后,它继续执行,并将返回的值写入,如果承

  • 问题 怎样捕获代码中的所有异常? 解决方案 想要捕获所有的异常,可以直接捕获 Exception 即可: try: ... except Exception as e: ... log('Reason:', e) # Important! 这个将会捕获除了 SystemExit 、 KeyboardInterrupt 和 GeneratorExit 之外的所有异常。