请问node中的for循环如何解决?
发布于 10 年前 作者 youqingkui 9562 次浏览 最后一次编辑是 8 年前
  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) 中有异步操作吗 感觉还是异步的问题

回到顶部