Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在node.js中编写for循环,以便每个任务都可以串行执行_Javascript_Node.js_For Loop_Asynchronous - Fatal编程技术网

Javascript 如何在node.js中编写for循环,以便每个任务都可以串行执行

Javascript 如何在node.js中编写for循环,以便每个任务都可以串行执行,javascript,node.js,for-loop,asynchronous,Javascript,Node.js,For Loop,Asynchronous,我想在for循环中写一个find()查询,现在我想先执行查询,然后再增加for循环的I,有人能告诉我怎么做吗。我在这里读了很多答案,但是每一个都是并行执行查询的del,但是我想串行调用它们,否则这里就没有排序操作了 merchantmodel.find({merchant_id: merchant_id}, {'review':1, '_id':0, 'rating':1, 'anonymous': 1, 'user_id': 1}, {sort: {time_at: -1}, limit :

我想在for循环中写一个find()查询,现在我想先执行查询,然后再增加for循环的I,有人能告诉我怎么做吗。我在这里读了很多答案,但是每一个都是并行执行查询的del,但是我想串行调用它们,否则这里就没有排序操作了

merchantmodel.find({merchant_id: merchant_id}, {'review':1, '_id':0, 'rating':1, 'anonymous': 1, 'user_id': 1}, {sort: {time_at: -1}, limit : 3}, function(err, docs) {
        if (err) {
            console.log('Error Finding query results');
            console.log(err);
            res.json({success: 0, message : err});
            return next(err);
        } else {
            if (docs) {
                //
                res.write('{');
                res.write('\n');
                res.write("\"success\": 1, \n")
                res.write("\"message\": \"Successfully Fetched the Reviews\", \n")
                res.write("\"reviews\": [");
                res.write('\n');
                for(var i = 0; i < docs.length; i++){
                    console.log('i: ', i);
                    if (docs[i].anonymous == 1) {
                        console.log('Anonymous');
                        res.write(JSON.stringify({review: docs[i].review, rating : docs[i].rating, user_name : "Anonymous"}));
        //              res.json({review: docs[i].review, rating : docs[i].rating, user_name : "Anonymous"});
                    } else  {
                        var user_idd = docs[i].user_id;
                        var revieww = docs[i].review;
                        var ratingg = docs[i].rating;
                        console.log('user_id : ', user_idd);
                        console.log('review : ', revieww);
                        console.log('rating : ', ratingg);
                        usermodel.findOne({jeb_no: user_idd }, {'user_name':1, '_id':0}, function(err, docss) {
                            if (err) {
                                console.log('Error Finding query results');
                                console.log(err);
                                res.write(JSON.stringify({review: revieww, rating : ratingg, user_name : "Anonymous"}));
                //              res.json({review: revieww, rating : ratingg, user_name : "Anonymous"});
                                return next(err);
                            } else {
                                if (docss) {
                                    console.log('Username : ', docss.user_name);
                                    res.write(JSON.stringify({review: revieww, rating : ratingg, user_name : docss.user_name}));
                    //              res.json({review: revieww, rating : ratingg, user_name : docss[i].user_name});
                                } else {
                                    console.log('No Username');
                                    res.write(JSON.stringify({review: revieww, rating : ratingg, user_name : "Anonymous"}));
                    //              res.json({review: revieww, rating : ratingg, user_name : "Anonymous"});
                                }
                            }
                        });
                    }
                    if (i < docs.length - 1) {
                            res.write(',');
                    }                       
                }
                res.write('\n');
                res.write(']');
                res.write('\n');
                res.write('}');
                res.end();
            } else {
                console.log('No Reviews');
                res.json({success: -1, message : "No Reviews"});
            }
        }
    });
merchantmodel.find({merchant\u id:merchant\u id},{'review':1,'u id':0,'rating':1,'anonymous':1,'user\u id':1},{sort:{time\u at:-1},limit:3},函数(err,docs){
如果(错误){
log('Error Finding query results');
控制台日志(err);
res.json({success:0,message:err});
返回下一个(错误);
}否则{
如果(文档){
//
res.write('{');
res.write('\n');
res.write(“成功”:1,\n)
res.write(“\”消息\“:\”已成功获取评论\“,\n”)
res.write(“\”评论\“:[”);
res.write('\n');
对于(变量i=0;i
在for循环中使用上下文绑定

for(var i = 0; i < docs.length; i++){
     (function(i){ //add this function call, don't forget ending parenthesis
         //execution context, i is safe here
     }(i);                   
}
for(变量i=0;i
以下是一些很好的答案,我个人使用的是
async
(第二个最佳答案)你可以使用
asyn.eachSeries
来循环运行一系列的每项任务。不管是谁离开了否决票,知道你为什么否决了答案都会很有用。顺便问一下,你能详细告诉我@evec这里发生了什么吗?谢谢你的回答。我100%确定你的
i
行为出人意料,这就是你必须使用上下文bi的原因nding,以确保
i
是预期的数字,因为您在mongoose回调中使用它。在没有上下文绑定的情况下,
i===docs.length
在for循环中的任何部分