猫鼬保存循环丢失迭代器
Mongoose save loop lost iterator
我必须在我的数据库中保存大量的对象。
下面是我的代码示例:for (var i = 0; i < userdata.length; i++) {
var newCompany = Company({
name: userdata[i].company_name
});
newCompany.save(function(err, c) {
if (err) throw err;
var newGeoloc = Geolocation({
latitude: userdata[i].latitude,
longitude: userdata[i].longitude
});
newGeoloc.save(function(err, g) {
if (err) throw err;
// Create new Office
var newOffice = Office({
name : userdata[i].office_name,
address : userdata[i].address,
city : userdata[i].city,
zip_code : userdata[i].zip_code,
geolocation : g._id,
company : c._id
});
// Save the Office
newOffice.save(function(err, officeCreated) {
if (err) throw err;
console.log('Office created!');
});
});
}
为什么我的i
变量当我保存地理位置对象latitude: datas[i].latitude
得到我的数组userdata.length
的最大长度?例如,如果userdata有150对象,我将总是得到150当我创建地理位置对象。
我该怎么办?
由于for
循环运行时没有等待save
函数接收回调,因此可以使用闭包将i
的值保持为自调用函数的本地值,如下所示。
for (var i = 0; i < userdata.length; i++) {
(
function(index) {
var newCompany = Company({
name: userdata[index].company_name
});
newCompany.save(function(err, c) {
if (err) throw err;
var newGeoloc = Geolocation({
latitude: userdata[index].latitude,
longitude: userdata[index].longitude
});
newGeoloc.save(function(err, g) {
if (err) throw err;
var newOffice = Office({
name : userdata[index].office_name,
address : userdata[index].address,
city : userdata[index].city,
zip_code : userdata[index].zip_code,
geolocation : g._id,
company : c._id
});
// Save the Office
newOffice.save(function(err, officeCreated) {
if (err) throw err;
console.log('Office created!');
});
});
});
}
)(i);
}
当每次循环运行时调用自调用函数时,i
的值被复制到变量index
。
相关文章:
- Babel编译错误:找不到模块核心js/library/fn/get迭代器
- 从两个基于0的for循环迭代器中获取单个基于0的索引的公式
- Rails:试图在javascript(Google Charts API)中嵌入一个adv-ruby(each+迭代器
- 在javascript中,从迭代器创建Array
- Javascript中的迭代器和生成器
- 从迭代器/生成器中获取单个yield值
- 循环中的Node.js回调具有错误的迭代器值
- Javascript使用for-in循环迭代器来设置变量
- 将模式与循环中的迭代器匹配
- JS:使用迭代器在循环中创建对象
- 如何循环来自生成器的JavaScript迭代器
- Javascript-如何在带有回调的for循环中使用迭代器
- 如何访问Javascript中循环函数的helper中的迭代器
- 主干模型循环输出最终对象,而不是迭代器
- TypeScript编译器无法在for of循环中找到immutable.js Map迭代器
- 列表迭代器中的无限循环
- 猫鼬保存循环丢失迭代器
- 我需要在for循环中声明迭代器吗
- 将循环迭代器值绑定到Javascript中的回调函数
- Javascript for 循环,中间是迭代器,递减运算符在 i 的左侧