【问题标题】:system - Sleep not working properly系统 - 睡眠无法正常工作
【发布时间】:2017-10-27 14:28:13
【问题描述】:

我想将从数据库中获取的所有数据存储在 arr_obj 中,然后使用这个变量 int async.forEachLimit 函数。出于这个原因,我使用了 async.series 函数,除了 sleep(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");
    });

【问题讨论】:

  • “将所有结果放在一起”是什么意思?此外,这听起来像“按设计”工作,因为它应该在调用第二个函数后立即休眠。然后,使用“回调”以外的名称作为 forEachLimit function 的回调名称可能是个好主意。最后,我想知道这里的实际问题是什么:你期待什么?
  • 尝试使用设置超时并使用计数器查看是否通过睡眠
  • @Gyuri 我希望程序在函数 Quality_Service.qualityService 之后每次都休眠 1000 毫秒,而是在调用 async.series 中的第二个函数时休眠一段时间。
  • sleep() 有什么用?一种选择是使用与异步/系列示例中使用的相同逻辑:setTimeout 在异步回调之前(或更确切地说是围绕)使用 setTimeout 而不是 sleep,在您的情况下为回调 1:caolan.github.io/async/docs.html#series
  • 当我不使用 async.series 并直接在函数 Quality_Service.qualityService 中传递 arr_obj 时,每次调用函数后 sleep() 等待指定时间。

标签: javascript node.js async.js


【解决方案1】:

尝试在 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);
            });                
        });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-24
    • 2014-05-30
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多