每个项目停止运行代码5次的ForEach循环

时间:2017-11-29 09:54:28

标签: javascript arrays node.js foreach

我希望我的代码在循环中的每个项目中插入1个文档,但是它会一直插入5个。我已经在这里工作了好几个小时,现在是凌晨3:41,请帮帮忙。

代码杂乱如此简单地说,循环将扫描一个类别列表并使用该类别的索引来提取与其相关的其他数据,例如该人在该类别中制作的点数,当天等等。

我正在使用nodejs,你将在下面看到的是我在我的router.js文件中调用的一个Schema的方法。

是的,我在这里读了15个以上的问题,我认为可能会有所帮助,但不会使用我正在使用的编码语言而不是确切的问题。

for循环构建了我试图保存在学生档案中的点对象。

    //the for loop should build something like this
            { date: '9/13/2017',
              category:"Participation",
              specification:"Pitchball Game",
              points:150
            }

Js文件:

    StudentSchema.statics.givePoints = function (pt_obj, cb){
var leng =pt_obj.category.length;
var i=0;
var rsc = 'r' + pt_obj.room + '-' + pt_obj.seat;
Student.findOne( {rscombo: rsc },  function (err, student){
    if ( err || !student){
        console.log('not a student');
    }
    else{

        pt_obj.category.forEach(function( cat, ind){

            if(cat != '' && cat != null && cat != undefined && cat != '--select--'){
                var pts = Number(pt_obj.pts[ind]);

                student.points.push({ date: pt_obj.date[ind], category: cat, specification : pt_obj.specification[ind], points:Number(pt_obj.pts[ind]), sysdate:pt_obj.date[ind] });

                if(cat != 'Purchase'){


                    ptMonth = Number(pt_obj.date[ind].slice( 0, pt_obj.date[ind].indexOf('/') ) );

                    var query ={starlight:pts, balance:pts};
                    var trailMe  = 'lightTrails' + ptMonth + '.';
                    var trailCat;
                    var hightrail= trailMe + '0';
                    query[hightrail]=pts;


                    switch (cat){
                        case 'Behavior':
                            trailCat= trailMe + '1';
                            query[trailCat]=pts;
                            console.log(trailCat);
                            break;
                        case 'Contest':
                            trailCat= trailMe + '2';
                            query[trailCat]=pts;
                            console.log(trailCat);
                            break;
                        case 'Game':
                            trailCat= trailMe + '3';
                            query[trailCat]=pts;
                            console.log(trailCat);
                            break;
                        case 'High Score':
                            trailCat= trailMe + '4';
                            query[trailCat]=pts;
                            console.log(trailCat);
                            break;
                        case 'Participation':
                            trailCat= trailMe + '5';
                            query[trailCat]=pts;
                            console.log(trailCat);
                            break;
                        case 'Wage':
                            trailCat= trailMe + '6';
                            query[trailCat]=pts;
                            console.log(trailCat);
                            break;
                    }


                    console.log('attacking query \n' + query);


                    //always add it to the starlight, highlight as well as specific category
                    Student.update( { rscombo : rsc } , { $inc: query }, function (err, student){
                        if(err || !student){
                            console.log('update unsuccessful');
                        } });
                } else{
                    var pts = Number(pt_obj.pts[ind]);
                    Student.update( { rscombo : rsc } , { $inc: { balance: pts} }, function (err){
                        if(err){
                            console.log('update unsuccessful');
                        }
                    } );
                }
            }
            if( leng-1 == i){
                student.save(cb);
            }else{
                student.save(function(err){
                    if(err){
                        console.log(err);
                    }
                })
            }
            i++;
        });
    }
});
return Student.findOne( { rscombo: 'r' + pt_obj.room + '-' + pt_obj.seat},  cb);

}

1 个答案:

答案 0 :(得分:0)

谢谢Amor,你所说的让我思考并切换我的代码,以便我的forEach在外面,而findOne方法在里面。它似乎有效。非常感谢你。

  pt_obj.category.forEach(cat, ind){ 
    Student.findOne({}, function (){

    })
  }