2017-05-26 75 views
1

我想将所有从数据库中取出的数据存储在arr_obj中,然后使用这个变量int async.forEachLimit函数。出于这个原因,我使用async.series函数,除睡眠(1000)以外,一切正常,只要调用了async.series的第二个函数,代码就会休眠,然后将所有结果一起给出。在NodeJs中,我没有初学者对这一切有很多想法。系统 - 睡眠不正常

var sleep = require('system-sleep'); 
// 
// 
var arr_obj = []; 
    async.series([ 
     function (callback) { 
      Service.listAllUser(req.body, function (err, data) { 
       if(err) return callback(err); 
       arr_obj = data.toJSON(); 
       callback(); 
      }); 
     }, 
     function (callback1) { 
     console.log(arr_obj); 
      async.forEachLimit(arr_obj, 1, function (item, callback) { 
       Quality_Service.qualityService(item, function (err, data) { 
        if (err) return next(err); 
        console.log(data); 
       }); 
       sleep(1000); 
       callback(); 
      }); 
      callback1(); 
     } 
    ], function (err) { //This function gets called after the two tasks have called their "task callbacks" 
     if (err) return next(err); 
     res.send("okay"); 
    }); 
+0

什么是 “把所有的结果一起” 是什么意思?此外,它听起来像这样“按设计”工作,因为它*应*睡在第二个函数被调用后。然后,使用除“callback”之外的东西作为forEachLimit'function'的回调名称可能是个好主意。最后,我想知道这里的实际问题是什么:你期待什么? – Gyuri

+0

尝试使用设置的超时时间,并使用计数器来查看它是否通过睡眠 – atjoshi

+0

@Gyuri我希望程序应该在函数Quality_Service.qualityService之后每次睡眠1000毫秒,而不是在第二个函数进入睡眠一段时间后async.series被调用。 –

回答

0

尝试使用回调的foreach内,与setTimeout的

async.forEachLimit(arr_obj, function (item, callback) { 
      Quality_Service.qualityService(item, function (err, data) { 
       if (err) return next(err); 
       setTimeout(callback, 1000, err); 
      });     
     }); 
+1

感谢您的帮助,这终于工作:) –