请问node中的for循环如何解决? - CNode技术社区

请问node中的for循环如何解决?
发布于 12 年前 作者 youqingkui 10341 次浏览 最后一次编辑是 9 年前
 for(var i=0; i<10; i++){
 
 //console.log(i); 
 
 var a = {seller_id : 1, order_id : 2};
 console.log(i);
 newAlready = new Already(a);
 newAlready.save(function(err, doc){
 console.log(doc); 
 });
 
 }

我运行,但是只会插入执行一次newAlready.save,这是异步问题吗?谢谢!

16 回复

是,这样肯定不行!

这种东西网上很多吧...用个闭包就可以搞定...

 for(var i=0; i<10; i++){
 //console.log(i); 
 (function (i) {
 var a = {seller_id : 1, order_id : 2};
 console.log(i);
 var newAlready = new Already(a);
 newAlready.save(function(err, doc){
 console.log(doc); 
 });
 })(i)
 
 }

请问怎么解决?

试了下,不能解决,运行结果: 0 1 2 3 4 5 6 7 8 9 connected as id 156 9 [ { order_id: 2, seller_id: 1, _id: 53b24e9a48e957361684cfcb } ]

@youqingkui

Already.save 是个异步方法吧...这样写应该没错吧. 查一下异常吧?

@youxiachai 嗯,是mongodb的存储。

这里没有闭包,不需要,主要问题是mongoose,第一次成功了,后几次都失败了,doc是null所以显示不出来,你输出err试试

使用async库,如果想本次循环结束再进行下次循环就使用async.whilst方法,如果要并行,就是用集合操作async.forEach

不会只执行一次吧,看代码应该是会执行10次的。

楼主,不是你这么干的吧,用async

我也用async模块

使用async promise 等同步模块吧〜

肯定是newAlready.save自身的问题

代码问题吧!我循环插入几万条数据 都没出问题:https://gitcafe.com/zhaop_roc/AtlasSpider-3/blob/master/groupon/proxy/coupon.js 代码第113行,也是用的new 和 save

试试把回调去掉!

new Already(a) 中有异步操作吗 感觉还是异步的问题

回到顶部

AltStyle によって変換されたページ (->オリジナル) /