Node.js ExpressJS后端将请求放入队列
我让客户端发送任务,由服务器执行,但这些请求应该以类似队列的方式处理。你知道我该怎么做吗?谢谢Node.js ExpressJS后端将请求放入队列,node.js,express,promise,bluebird,Node.js,Express,Promise,Bluebird,我让客户端发送任务,由服务器执行,但这些请求应该以类似队列的方式处理。你知道我该怎么做吗?谢谢 express.Router().post('/tasks',函数(req,res){ //这是要执行的任务。在执行时,另一个用户 //可能会发送请求,并且仅应在完成此操作后进行处理。 //如果挂起的任务已完成,则还应标记该任务。 承诺.解决(要求正文) .然后(函数(){ //.. }) .catch(函数(错误){ //.... }) })当然,这很简单,假设您有一个函数fn返回一个承诺 var
express.Router().post('/tasks',函数(req,res){
//这是要执行的任务。在执行时,另一个用户
//可能会发送请求,并且仅应在完成此操作后进行处理。
//如果挂起的任务已完成,则还应标记该任务。
承诺.解决(要求正文)
.然后(函数(){
//..
})
.catch(函数(错误){
//....
})
})
当然,这很简单,假设您有一个函数fn
返回一个承诺
var res = fn(req.body); // returns the appropriate promise
您想在其中添加排队。您必须执行以下操作:
var queuedFn = queue(fn);
express.Router().post('/tasks', function(req, res) {
queuedFn(req.body).then(v => res.json(v), e => res.error(e));
});
- 用
装饰fn排队
,这样当调用fn
时,我们:fn排队
- 为价值创造新的承诺
- 排队工作
then
中所做的,因此我们可以重用它,而不是实现我们自己的排队逻辑:
function queue(fn) {
var queue = Promise.resolve(); // create a queue
// now return the decorated function
return function(...args) {
queue = queue.then(() => { // queue the function, assign to queue
return fn(...args); // return the function and wait for it
});
return queue; // return the currently queued promise - for our argumnets
}
}
这将让我们做一些类似的事情:
var queuedFn = queue(fn);
express.Router().post('/tasks', function(req, res) {
queuedFn(req.body).then(v => res.json(v), e => res.error(e));
});
看一看