我有一个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()
}
});
}
答案 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混合的下颌使人感到头晕。