在mongoose中,promise的疑惑
发布于 3 个月前 作者 FantasyGao 704 次浏览 来自 问答

mongoose自己带的promise不能捕获发生的错误,求指点

 var promise =await myModel.findById(info).exec()
     .then(function (doc) {
        console.log(doc)
    })
    .catch(function (err) {
        console.log(err.toString())
    })
传的info不合规则的时候不能捕获到错误

自带promise

不使用自带的promise,可以再catch里捕获到

    var promise =new Promise(function(resolve, reject) {
         myModel.findById(info)
         resolve(1)
    })
    .then(function (doc) {
        console.log(doc)
    })
    .catch(function (err) {
        console.log(err.toString())
    })

不使用自带promise

5 回复

Mongoose 自带的 Promise 不提供 catch。 StackOverflow 貌似是因为 catch 不属于 Promises/A+ 规范。GitHub Issue 而且 Mogoose 自带的 Promise 已经弃用了。LZ的第二种写法也不是 Mogoose 官方推荐的,最好用

mongoose.Promise = global.Promise;
// or
mongoose.Promise = require('bluebird');

这种方法定义自己的 Promise。官方文档

一楼正解,不想引用太多的包的话,就 mongoose.Promise = global.Pormise;

@zhang962976642 正在尝试 ,多谢指点

mongodb 不是没有自带promise了么,,,

router.get('/list',async (ctx,next) => { 
  ctx.body = await Login.find({})
})
回到顶部