【发布时间】:2017-12-28 13:38:09
【问题描述】:
我目前正在学习 nodejs 中的 Promises,现在我在处理 mongoDB 查询和 Promise 方面有点卡住了。这是我在下面的示例代码。
db.collection(module.exports.collectionName).find( {"$or" :[{"email":req.body.email},{"username":req.body.username}]},function(err,success){
if (err) {throw new Error("Error in accessing DB - check new user"); }
return success;
}).toArray().then(function(value){
console.log(value.length);
if (value.length == 0) {
db.collection(module.exports.collectionName).insertOne(insert,function(err,success){
if (err) {throw new Error("Error in accessing DB - insert new");}
return success;
}).then(function(value){
return resolve("Success")
}).catch(function(value){
return reject("Error happened during accessing DB, please contact the Admin inside");
});
}
return reject("Email / Username is not unique");
}).catch(function(value){
return reject("Error happened during accessing DB, please contact the Admin");
});
抱歉,代码中有很多混乱。我想在这里问一些关于查询处理的事情。首先,我们如何正确处理mongodb查询中的错误,这应该是由这个处理的
,function(err,success){
if (err) {throw new Error("Error in accessing DB - check new user"); }
return success;
}).
一段代码?
在 toArray() 之后添加“then”解决了我之前的问题,当它到达 db 插入代码时,promise 尚未解决。但是,既然我有另一个数据库查询,我该如何正确(再次)处理异步调用?上面的例子对吗?
在 DB 中不重复运行此代码(意味着第一个查询返回 null)将导致返回拒绝代码“访问数据库时发生错误,请联系管理员”(最后一个拒绝)。但是,数据库更新得很好,这意味着它应该到达 then 而不是 catch。查询应该在中间部分达到了解析并返回,但似乎代码以某种方式触发了捕获。
【问题讨论】:
-
我会通过一些关于 Promise 如何工作的文章来跟进你的探索。这是一个示例:davidwalsh.name/promises.
标签: node.js mongodb express promise