我想在快速路线中调用我的物体的功能。此函数应调用mongoose查询,然后运行next,next等 - 所有需要的操作。
这是我的示例路线:
var MailSender = require('../../libs/mailer');
router.get('/mailer/test', function (req, res, next) {
MailSender.getPending();
});
邮件文件:
(here include all required)
module.exports = {
currentMails : {},
getPending : function() {
MailObj.find()
.limit(10)
.exec(this.blockPending);
},
blockPending : function(err, mail) {
currentMails = {};
mail.forEach(function(data) {
let mailId = mongoose.Types.ObjectId(data._id);
currentMails[mailId] = data;
});
MailObj.update({ _id: { $in: Object.keys(currentMails) } }, { block: 1 }, {multi: true}, function() {
// Doesn't work
this.myNextFunc();
});
},
myNextFunc : function() {
console.log("Yep!");
}
}
但是...... myNextFunc()不起作用,我不能从这个范围调用任何对象函数(控制台说它们是未定义的)。我知道,我做错了但是......什么?
我想在这些对象中封装相关函数并在内部作为回调运行。我究竟做错了什么?
答案 0 :(得分:1)
就你使用Mongoose而言,为什么不从中获利,并且你在循环中更新每个邮件?它的效率较低,但可能是它应得的第一种方法:
var numUpdates = 0;
mail.forEach(function(data) {
data.block = 1;
data.save(function(err, mailSaved) {
//check error
if(numUpdates ++ >= mail.length) {
this.myNextFunc();
}
})
});