CNode

请问node中的for循环如何解决?

Yyouqingkui发布于12 年前最后回复12 年前16 回复10611 浏览0 收藏
  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)

X
xiuxu123#1·12 年前

是,这样肯定不行!

Y
youxiachai#2·12 年前

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

  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)
   

  }
Y
youqingkui#3·12 年前
引用 xiuxu123是,这样肯定不行!

请问怎么解决?

Y
youqingkui#4·12 年前
引用 youxiachai这种东西网上很多吧...用个闭包就可以搞定..

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

Y
youxiachai#5·12 年前
引用 youxiachai这种东西网上很多吧...用个闭包就可以搞定..

@youqingkui

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

Y
youqingkui#6·12 年前
引用 youxiachai这种东西网上很多吧...用个闭包就可以搞定..

@youxiachai 嗯,是mongodb的存储。

D
dlutwuwei#7·12 年前

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

Z
zc001#8·12 年前

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

A
alsotang#9·12 年前

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

T
tofrookie#10·12 年前

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

R
ronincn#11·12 年前

我也用async模块

H
Hi-Rube#12·12 年前

使用async promise 等同步模块吧~

M
MiguelValentine#13·12 年前

肯定是newAlready.save自身的问题

A
anhchilyun#14·12 年前

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

A
anhchilyun#15·12 年前

试试把回调去掉!

X
xinght#16·12 年前

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

参与回复
登录后即可参与回复。登录