我想知道下面的代码是否有用,如果没有,有人可以提供替代方案吗?
db.model('orders').find({creationDate: {$lt:today}}, {status: "Active"}).exec(function(err,orders){
if(err) ...
if(orders){
for(var i = 0 ; i < orders.length ; i++){
// some business logic here....
orders[i].remove(function(err){
if(err) ...
});
}
}
});
我的目标是根据creationDate
和status
查询一些文档,然后根据这些文档执行一些业务逻辑。完成业务逻辑后,我想编辑这些文档并将其保存到数据库中。
感谢帮助者。
答案 0 :(得分:1)
更简单直观的方法是使用 async 库。当您需要运行多个彼此依赖的任务以及何时完成其他任务时,请使用 async.series()
方法。
考虑以下示例:
// Define query document out here, so both tasks can access it
var query = {"creationDate": {"$lt": today}}, {"status": "Active"};
async.series([
// Load orders that satisfy the above query to do the business logic first
function(callback) {
db.model('orders').find(query).exec(function(err, orders) {
if (err) return callback(err);
// Do the business logic here
....
callback();
});
},
// Update orders (won't be called before task 1's "task callback" has been called)
function(callback) {
db.model('orders').update(
query,
{"$set": {"status": "Deleted"}},
{"multi": true}
).exec(function(err, results) {
if (err) return callback(err);
callback();
});
}
], function(err) {
// This function gets called after the two tasks have called their "task callbacks"
if (err) return next(err);
// Do something else after the two tasks have been called
});