【发布时间】: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