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

时间:2017-12-05 15:40:27

标签: node.js mongodb express mongoose

我想在快速路线中调用我的物体的功能。此函数应调用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!");
    }
}
  • getPending - 效果很好,并使用查询结果调用blackPending。
  • blockPending - 很棒,我可以准备ID并更新记录

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

我想在这些对象中封装相关函数并在内部作为回调运行。我究竟做错了什么?

1 个答案:

答案 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();
        }
    })
});