我有一个 Nodejs 应用程序,它具有处理用户并启动 Web 应用程序的 http 请求的 Express API。
如何使特定函数按用户顺序执行?即对来自一个用户的调用进行排队,但让另一用户的调用并行排队
这有意义吗?
我发现很多库都会对调用进行排队 - 或按时间限制请求。我将如何在用户基础上实现这一点?
<小时/>编辑
示例:我有两个登录用户。完全执行myFunction('some http request')大约需要3-5秒
user1 调用 myFunction() -> 立即执行
user2 调用 myFunction() -> 立即执行
user2 立即再次调用 myFunction(),而第一个调用仍在处理中 -> 调用会排队,直到第一个调用完成。所以类似 myFunction().then()
最佳答案
不要让事情变得过于复杂,你可以使用'async ' 模块的'自动'功能。
如果将并发(int 值)传递给它,它将并行运行该数量的任务(最多)。在我们的例子中,我们传递 1,以便为特殊用户顺序执行函数。 如果您不传递任何值,它将运行尽可能多的并行任务。
'use strict';
const async = require('async');
const _ = require('lodash');
//Async function
const myFunction = function (data, cb) {
setTimeout(() => {
console.log(data);
cb(null);
}, _.random(1, 1000));
};
//Do your logic to understand if the user is 'special'
//So we call the functions sequentially
let isSpecialUser = false;
//Allow only one in parallel if this is a special user
//else - allow as much as possible
let concurrency = isSpecialUser ? 1 : null;
async.auto(
[
cb => myFunction('First', cb),
cb => myFunction('Second', cb),
cb => myFunction('Third', cb),
],
concurrency,
() => {
console.log('All done');
//Do needed stuff here, all calls are done
//(sequentially or in parallel depending on a user)
}
);
关于javascript - 使nodejs函数对一个用户来说是连续的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42721430/