gpt4 book ai didi

javascript - NodeJs Mongoose Promise then/catch

转载 作者:行者123 更新时间:2023-12-03 06:43:08 25 4
gpt4 key购买 nike

面临 Mongoose promise 的问题

MyModel.find().then((data)=> Promise.reject())
.catch(()=>console.log('first catch'))
.then(()=>console.log('ok'))
.catch(()=>console.log('second catch'));

执行后我得到

first catch
second catch

但是如果我只使用 native Promise 来做到这一点:

Promise.reject()
.catch(()=>console.log('first catch'))
.then(()=>console.log('ok'))
.catch(()=>console.log('second catch'));

执行后我得到

first catch
ok

就 Promise 而言没问题 docs

看来 Mongoose 使用了自己的 promise 实现

我发现可以通过执行以下操作来解决该问题

new Promise((resolve, reject) => { MyModel.find().then((data) => reject()) })
.catch(()=>console.log('first catch'))
.then(()=>console.log('ok')
.catch(()=>console.log('second catch'));

它按照文档应有的方式工作:

first catch
ok

有什么建议可以更好地使用它吗?

最佳答案

Mongoose 使用 Promises/A+ 一致的 Promise。为了向后兼容,Mongoose 4 默认返回 mpromise promise 。

如果你想使用高级的 Promise 功能,你应该使用像 bluebird 或原生 ES6 Promise 这样的库。为此,只需将 mongoose.Promise 设置为您最喜欢的 ES6 风格的 Promise 构造函数,mongoose 就会使用它:

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

Mongoose documentation

关于javascript - NodeJs Mongoose Promise then/catch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37862813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com