sails js waterline exec函数访问外部变量

时间:2015-07-24 14:54:54

标签: mongodb sails.js waterline

我有一个for循环用于在MongoDB中创建文档的大约5000个项目。 我的代码如下所示。问题是如何在exec函数

中访问名为 rawInfo 的变量
 for (var i = 0, len = output.length; i < len; i++) {

        var rawInfo  = output[i];

     Vehicle.create({make :  rawInfo.make,model: rawInfo.model,year:rawInfo.year,
     tests : {deviceGeneration: rawInfo.deviceGeneration,
        overAllComp:rawInfo.overAllComp}}).exec(function(err,vehCreated){

          if(err && err.originalError && err.originalError.code===50)
           {
              // error vehicle is already present try to add test
              // using ***rawInfo*** variable 
             //VehicleTest.create()     

            }




        });


      }

1 个答案:

答案 0 :(得分:1)

vehicle_TestInfo在整个循环范围内都可用,因此您可以在内部exec()中访问它,就像在外部exec()中一样。如果您要在调用内部exec()之前添加更多代码,或者希望避免从循环级范围调用vehicle_TestInfo,那么您也可以从vehCreated检索属性。您可以访问新创建的对象。

因此,其中任何一种都可以正常工作:

for (var i = 0, len = output.length; i < len; i++) {
    var vehicle_TestInfo  = output[i];

    Vehicle.create({ make : vehicle_TestInfo.make,
                    model: vehicle_TestInfo.model,
                    year: vehicle_TestInfo.year,
                    tests : { deviceGeneration: vehicle_TestInfo.deviceGeneration,
                                overAllComp: vehicle_TestInfo.overAllComp }
            }).exec(function(err,vehCreated){
                if (err && err.originalError && err.originalError.code === 50) {
                    VehicleTest.create({ deviceGeneration: vehicle_TestInfo.deviceGeneration,
                                            overAllComp: vehicle_TestInfo.overAllComp})
                            .exec(function(err,testCreated) {
                                    // more code
                            });
                }
    });
}

OR

for (var i = 0, len = output.length; i < len; i++) {
    var vehicle_TestInfo  = output[i];

    Vehicle.create({ make : vehicle_TestInfo.make,
                    model: vehicle_TestInfo.model,
                    year: vehicle_TestInfo.year,
                    tests : { deviceGeneration: vehicle_TestInfo.deviceGeneration,
                                overAllComp: vehicle_TestInfo.overAllComp }
            }).exec(function(err,vehCreated){
                if (err && err.originalError && err.originalError.code === 50) {
                    VehicleTest.create({ deviceGeneration: vehCreated.deviceGeneration,
                                            overAllComp: vehCreated.overAllComp})
                            .exec(function(err,testCreated) {
                                    // more code
                            });
                }
    });
}

PS:正如评论中所指出的,请格式化您的代码并正确构建您的问题。另外,尝试以一定的一致性命名变量。与camelCase混合的下颌使人感到头晕。