我正在使用Mongoose、Express和NodeJS实现一个审批系统。
每个职位有2套审批。
我已经实现了如下模型:
Post Schema:
var PostSchema = new Schema({
UserId: { type: ObjectId, unique: true, default: null },
/..
.. Object related fields
../
Approval1: Object, //chidschema objects of approver
Approval2: Object
});
Approval Mapping Schema:
var ApprovalMapSchema = new Schema({
UserId: { type: ObjectId, unique: true, default: null },
Approver1Id: { type: ObjectId, default: null },
Approver2Id: { type: ObjectId, default: null }
});
我尝试先在函数中找到Map,然后在保存时更新主post对象。
我需要在保存新帖子之前检索两个批准人ID。
请建议一个好的方法去做它。我目前正在做:
1.使用Save //保存新Post对象在第2步后返回,我知道在Mongoose中异步保存,但我不希望在此之前调用第2步
1.使用ApprovalMapSchema上的findOne获取批准者ID
1.使用审批人条目更新Post对象。
post.save(函数(错误,文档){如果(错误){}否则{控制台.日志({成功:true,msg:'成功创建新公告',内容:文档}); } });
/*var actId = activation._id, distributorId, ttlId;
var approvalMap = ApprovalMap.findOne({ userId: myUserId }, function(err, appMap) {
if (err) throw err;
else{
Approver1Id = appMap.Approver1Id;
Approver2Id = appMap.Approver2Id;
}
});
// Create child objects after this and update as subdocument
这对我没用,求你了救命!
2条答案
按热度按时间i7uq4tfw1#
我很难理解你的问题,但听起来你想做这样的事情(你需要根据你想做的事情修改它,但希望它能给你一种处理异步行为的方法):
正如您所看到的,您可以在其他查询的回调中嵌套额外的查询或步骤。这将确保事情以正确的顺序运行。您可能还想 checkout NPM异步库,或者像Q或Bluebird这样的Promise库。他们也有一些很棒的解决方案来处理Node中的异步行为。
ht4b089n2#
根据@user2263572的建议,使用异步库。
我现在是这样实现的:
非常感谢@user2263572!!干杯!