javascript - Try/Catch 捕获 promise 拒绝...有什么办法解决这个问题吗?

标签 javascript mongodb promise

我必须使用try/catch,因为如果arg太短,MongoDb的ObjectId()将会中断/错误。

try 良好时,promise .catch 永远不会触发...看起来外部 catch(e) 会捕获 promise 拒绝()。这是预期的行为吗?无论如何?

   function deleteUser(req, res) {
      try {
        var userId = { '_id': ObjectId(String(req.params.user_id)) };
        var petData = _getAllData(userId);
        petData
        .then(function(doc) {
          data.deleteAllData(doc);
          result = user.remove(userId);
          _returnApi(result, res);
        })
        .catch(function(err) {
          console.log(`error delete user -${err}`);
          res.status(500).json({ error: "error deleting user" });
        });
      }
      catch(e) {
          res.status(400).json({ error: "user id format incorrect" });
      }
    }

最佳答案

根据这两个问题 12在 Mongoose 问题站点中进行了讨论,在 mongoose v4.2.5 之后,可以通过 exec() 在 find 方法中捕获 Invalid ObjectId ,这是在mongoose v4.4.2

下测试的示例代码
Foo.find({_id: 'foo'}) // invalid objectId
    .exec()
    .then(function(doc) {
        console.log(doc);
    })
    .catch(function(err) {
        console.log(err);
    })

输出:

{ [CastError: Cast to ObjectId failed for value "foo" at path "_id"]
  message: 'Cast to ObjectId failed for value "foo" at path "_id"',
  name: 'CastError',
  kind: 'ObjectId',
  value: 'foo',
  path: '_id',
  reason: undefined }

但是,根据this issueupdate方法仍然失败。

关于javascript - Try/Catch 捕获 promise 拒绝...有什么办法解决这个问题吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35859589/

相关文章:

javascript - YouTube 暂停、播放和停止不起作用

javascript - 填充 dojo dijit 组合框

node.js - 如何使用node.js获取mongodb中createAt以来的时间?

c# - 使用 mongo C# 驱动程序在嵌入式文档中维护 Id 属性名称

mongodb - 如何在 mongodb 中获取已批准用户的计数

javascript - 我怎样才能 promise 这个功能,这样它就不会阻止我的服务器启动?

用于 self 解析对象的 Javascript 帮助器,可与 Angulars $resource 等 Promise 一起使用

javascript - 如何正确使用引号内的引号

javascript - 在 AngularJS 表达式中使用变量?

javascript - 为什么以下代码不返回所有数组元素的总和?