gpt4 book ai didi

node.js - Express/Mongoose 使用对象函数作为回调不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 00:14:48 25 4
gpt4 key购买 nike

我想在快速路由中从我的对象调用函数。该函数应该调用 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 并更新记录

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

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

最佳答案

就你使用 Mongoose 而言,你为什么不利用它,并在循环中更新每封邮件?它的效率较低,但也许作为第一种方法它值得:

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

关于node.js - Express/Mongoose 使用对象函数作为回调不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47657408/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com