[nodejs]并发条件下,写入导致数组内数据相同
//dsgygb更新版
今天写的一个东西大概是这样:
var arr =[
'a','b','c','d'
]
var data = [];//定义存放数据的数组
var item = {};//定义应该存放在data里的格式为对象
async.each(arr,function(v,callback){
item.name = v;
data.push(item);
callback(null);
},function(err){
console(err);
})
console.log(data);
//data=['d','d','d','d']
然后就出了问题:返回的data
内的数据一样;
在某宝的帮助下,解决了问题(将var item = {};
定义在async.each()
第二个参数里)
并理解了原理(data
里存放的为item
的地址,在外面定义导致4个并发的线程不断修改item
指向的地址里的值,但是data.push
进去的总是那一个地址,就得到了4个一模一样的数组值,而把item
定义在asycn.each
里面,每一次都重新初始化item,使得4个并发的线程中item
中存放的地址不同,也就达到了预期效果).
所以正确的姿势是:
var arr =[
'a','b','c','d'
]
var data = [];//定义存放数据的数组
async.each(arr,function(v,callback){
var item = {};//定义应该存放在data里的格式为对象
item.name = v;
data.push(item);
callback(null);
},function(err){
console(err);
})
console.log(data);
//data=['d','d','d','d']
在此感谢dsg.