Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.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 将任务推送到async.queue阻塞express.js服务器_Javascript_Node.js_Express_Async.js - Fatal编程技术网

Javascript 将任务推送到async.queue阻塞express.js服务器

Javascript 将任务推送到async.queue阻塞express.js服务器,javascript,node.js,express,async.js,Javascript,Node.js,Express,Async.js,我有以下代码 var queue = require('async').queue(function(task, callback) { console.log("QUEUED JOB STARTED"); require('sleep').sleep(10); console.log("QUEUED JOB FINISHED"); callback(); }, 1); router.post('/generate/', function(request, result) {

我有以下代码

var queue = require('async').queue(function(task, callback) {
  console.log("QUEUED JOB STARTED");
  require('sleep').sleep(10);
  console.log("QUEUED JOB FINISHED");
  callback();
}, 1);

router.post('/generate/', function(request, result) {
  console.log("REQUEST RECEIVED");
  queue.push({});
  result.end();
  console.log("REQUEST PROCESSED");
});
当第一个请求到来时,它会立即被处理。但是,当下一个在第一个之后出现时,服务器将等待队列作业完成(10秒),因此输出为:

REQUEST RECEIVED
REQUEST PROCESSED
QUEUED JOB STARTED
QUEUED JOB FINISHED
REQUEST RECEIVED
REQUEST PROCESSED
QUEUED JOB STARTED
QUEUED JOB FINISHED
是否可以让Node.js排队并回答第二个请求,而不等待第一个请求实现以下输出

REQUEST RECEIVED
REQUEST PROCESSED
REQUEST RECEIVED
REQUEST PROCESSED
QUEUED JOB STARTED
QUEUED JOB FINISHED
QUEUED JOB STARTED
QUEUED JOB FINISHED

它是单线程的,无论何时调用
sleep
,它都将进入睡眠状态,不会处理更多请求,因为
sleep()
就是这样做的,它使用while循环来阻止整个线程。那么,如果它是单线程的,那么使用async.queue有什么意义呢?异步和多线程不是一回事,当你阻止线程时,你阻塞线程,这就是睡眠所做的。如果你不想异步行为,请使用承诺或超时。我希望有一个作业队列并对其进行一些控制(读取有多少任务正在等待,目前有多少任务正在处理等)