Javascript 在Nodejs中发送多封邮件
我正在开发的一个web应用程序将每三个月向客户发送一次发票。这将是一个在午夜运行的预定事件,但是在开发中,我把这个代码放到一个路由中,这样我就可以测试它。p> 简而言之,我希望代码执行以下操作Javascript 在Nodejs中发送多封邮件,javascript,node.js,asynchronous,mandrill,Javascript,Node.js,Asynchronous,Mandrill,我正在开发的一个web应用程序将每三个月向客户发送一次发票。这将是一个在午夜运行的预定事件,但是在开发中,我把这个代码放到一个路由中,这样我就可以测试它。p> 简而言之,我希望代码执行以下操作 从数据库查询所有未发送的发票 为每个发票调用Mandrill(在这个调用中,我还调用了一个函数,从发票创建Mandrill消息对象) 对于Mandrill发送的每条消息,更新数据库发票sent:true 发送所有发票后,在async.fallet 下面的代码可以工作。但是我对\每个都有一些担心 invoi
sent:true
async.fallet
\每个都有一些担心
invoices.post('/invoices/send/', function(req, res, next) {
async.waterfall([
// Query all unsent invoices
function(callback) {
db.invoices.find({sent: false}).toArray(callback);
},
// Send all unsent invoices
function(invoices, callback) {
if (invoices.length === 0) {
var err = new Error('There are no unsent invoices');
err.status = 400;
return next(err); //Quick escape if there are no matching invoice to process
}
// Make a call to Mandrill transactional email service for every invoice.
_.each(invoices, function(invoice) {
mandrillClient.messages.sendTemplate({template_name: "planpal-invoice", template_content: null, message: mandrillClient.createInvoiceMessage(invoice)}, function(sendResult) {
console.log(sendResult);
db.invoices.updateById(invoice._id, {$set: {sent: true}}, function(err, saveResult) {
console.log(saveResult);
});
}, function(err) {
return next(err);
});
});
callback(null, 'done');
}
],
function(err, result) {
if (err) {
return next(err);
}
res.json(result);
});
});
我想我应该使用async.eachLimit
。。。。但是我不知道怎么写。
我不知道应该将限制设置为什么,但我想几个并行请求比像上面那样在serie中运行所有mandrill请求要好,我错了吗编辑\每个
并行运行回调。与async.each
的区别在于我没有得到“最终回调”
结论:我应该使用上面的async.eachLimit
?如果是,什么是好的极限值?我认为您可以使用该函数
它也将并行执行查询是的,但我认为在向邮件服务发送请求时有一个很好的限制理由。因此,我的应用程序不会淹没服务器的请求,并被阻止/忽略或类似。但我真的不知道这是否必要。。。是吗?:)FWIW mandrillilapi文档没有特别提到速率限制错误,但是有关于他们每小时发送配额如何工作的问题。所以我想您应该可以只使用each()
。