Express / Mongoose使用对象函数作为callback不起作用

我想在快速路由中从我的对象调用函数。 这个函数应该调用mongoose查询,然后运行下一个等等 – 所有需要的操作。

这是我的示例路线:

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!"); } } 
  • getPending – 它工作得很好,并用查询结果调用blackPending。
  • blockPending – 伟大的作品,我可以准备ID和更新logging

但是… myNextFunc()不起作用,我不能从这个范围调用任何对象函数(控制台说,他们是未定义的)。 我知道,我做错了,但是…什么?

我想将这些对象中的相关函数封装起来,并以callback的方式运行。 我究竟做错了什么?

至于你使用mongoose,为什么不利用它,你更新每个邮件的循环? 效率不高,但可能作为其应有的第一种方法:

 var numUpdates = 0; mail.forEach(function(data) { data.block = 1; data.save(function(err, mailSaved) { //check error if(numUpdates ++ >= mail.length) { this.myNextFunc(); } }) });