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

sails js waterline exec function access outside variable

我有一个用于大约 5000 个项目的 for 循环,用于在 MongoDB 中创建文档。 我的代码如下所示。问题是如何在 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()     

            }




        });


      }

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
                            });
                }
    });
}

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:正如评论中所指出的,请格式化您的代码并正确构建您的问题。此外,尝试以某种统一的方式命名您的变量。下划线混合驼峰命名法让人头晕