如何在MongooseJS中的回调中返回查询条件

时间:2014-07-07 05:42:10

标签: node.js mongoose

我是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循环已经进行并显示最后一个索引。

流量控制库是解决这个问题的唯一方法吗?

感谢。

1 个答案:

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