我是MongooseJS和Node.js的新手,我有以下问题。我有一些处理大量电子邮件地址的代码。
这是我的代码:
for ( var i = 0, emailsToProcessLength = emailsToProcess.length;
i < emailsToProcessLength;
i++ ){
Casual.findOne({ email: emailsToProcess[ i ] })
.populate( 'affiliatedEmployers' )
.exec( function ( err, casualFound ){
if ( casualFound ) {
linkExistingCasualWithEmployer( employerFound, casualFound );
} else {
processNewCasual( req, employerFound, emailsToProcess[ i ] );
}
});
}
该代码适用于&#39; linkExistingCasualWithEmployer()&#39;方法因为&#39; casualFound&#39;返回,我可以看到找到的电子邮件地址。
然而,在&#39; processNewCasual()&#39;方法,如何查看原始findOne()方法中使用哪个电子邮件地址到Mongoose? (例如在回调中,我可以访问使用的搜索条件吗?)
我不能依赖&#39; i&#39;数组的索引,因为在调用回调时,for循环已经进行并显示最后一个索引。
流量控制库是解决这个问题的唯一方法吗?
感谢。
答案 0 :(得分:0)
最简单的解决方案可能是将电子邮件处理重构为单独的函数,以便将电子邮件地址作为参数捕获:
function processEmail(email) {
Casual.findOne({ email: email })
.populate( 'affiliatedEmployers' )
.exec( function ( err, casualFound ){
if ( casualFound ) {
linkExistingCasualWithEmployer( employerFound, casualFound );
} else {
processNewCasual( req, employerFound, email );
}
});
}
for ( var i = 0, emailsToProcessLength = emailsToProcess.length;
i < emailsToProcessLength;
i++ ) {
processEmail( emailsToProcess[ i ] );
}