Node js,使用带有Q promise的mongoose不会调用reject函数
Posted
技术标签:
【中文标题】Node js,使用带有Q promise的mongoose不会调用reject函数【英文标题】:Node js, using mongoose with Q promise does not call reject function 【发布时间】:2016-05-08 04:11:00 【问题描述】:我已经开始学习 Promise,我想将它与 mongoose 一起使用。我读过猫鼬的承诺是原始的,所以我使用以下代码申请了q
:
var mongoose = require('mongoose');
var q = require('q');
mongoose.Promise = q.Promise;
我已经创建了我的架构和模型,并尝试通过 Promise 调用函数:
User.findOne(chat_id: 2).exec().then(
function (obj)
console.log("SUCCESS");
console.log(obj);
,
function (err)
console.log("ERROR");
console.log(err);
).done();
当我调用此代码时,它总是调用resolve
部分并跳过reject
部分。我的控制台始终显示具有 SUCCESS
行的函数,即使 如果我故意查询不存在的数据。
我是否遗漏了什么,或者猫鼬会一直使用Model.method().exec().then(resolveFunction)
?
【问题讨论】:
【参考方案1】:没有找到东西不是错误,它只是意味着你没有找到东西。请参阅:What is returned from Mongoose query that finds no matches?,您的问题可能与此Mongoose JS findOne always returns null
有关也试试这个:注意我没有使用 q.Promise,我使用的是 bluebird。
User.findOne(chat_id: 2).exec().then(
function (obj)
if (obj.chart_id === 2)
console.log("SUCCESS");
console.log(obj);
else
console.log("obj with obj.chart_id == 2 NOT FOUND");
console.log(obj);
,
function (err)
console.log("ERROR");
console.log(err);
).done();
【讨论】:
以上是关于Node js,使用带有Q promise的mongoose不会调用reject函数的主要内容,如果未能解决你的问题,请参考以下文章
使用 Q Promise 的 node.js 项目的代码覆盖率
Promise 与 q 框架和 Node.js 中的回调模式?
node.js 模块:Async vs Fibers.promise vs Q_oper8