【问题标题】:Error handling using async/q/promises使用 async/q/promises 处理错误
【发布时间】:2016-11-05 06:35:15
【问题描述】:

我是使用 node.js 的新手,现在我正在开发一个查询 mongodb 的 API。

下面的函数 apiRequest 需要调用两个函数,每个函数执行一个单独的 db 查询。当前函数的问题是,如果其中一个查询有某种错误,我将无法捕获它。

实现这一点的最佳方法是什么,以便正确处理错误。有人将我指向异步库并提到我必须用 Promise 做一些事情,但我真的想不通。理想情况下,我不想更改 dbQueryOne 和 dbQueryTwo 的定义,因为它们也在其他地方使用。

exports.apiRequest =function(req,res) {
  dbQueryOne(req.body.inputA);
  dbQueryTwo(req.body.inputA);
  res.send('Moved For Further Action',200);
}

【问题讨论】:

  • "...我无法抓住它。" 为什么不呢?您调用的函数要么是同步的,在其中使用try/catch,要么(可能是这里的情况)它是异步的,在这种情况下,它为您提供了一种发现错误发生的机制。 (这可能涉及承诺,也可能不涉及;在 NodeJS 中,目前通常不涉及,但这种情况正在迅速改变。)

标签: javascript node.js mongodb asynchronous


【解决方案1】:
exports.apiRequest = function(req,res) {
  dbFuncs = [dbQueryOne(req.body.inputA), dbQueryTwo(req.body.inputA)];
  Promise.all(dbFuncs)
  .then(result => { 
    res.send('Moved For Further Action',200);
  })
  .catch(err =>{
    //catch err
  });
}

您可以使用 promise.all 运行多个查询并捕获在 catch 块中发生的任何错误

【讨论】:

    猜你喜欢
    • 2014-07-03
    • 2017-01-11
    • 1970-01-01
    • 2014-06-21
    • 2018-10-26
    • 2014-12-01
    • 1970-01-01
    • 2018-09-03
    • 2018-03-11
    相关资源
    最近更新 更多