2017-05-26 121 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

感謝您的幫助,這終於工作:) –