javascript - 使nodejs函数对一个用户来说是连续的

标签 javascript node.js express

我有一个 Nodejs 应用程序,它具有处理用户并启动 Web 应用程序的 http 请求的 Express API。

如何使特定函数按用户顺序执行?即对来自一个用户的调用进行排队,但让另一用户的调用并行排队

这有意义吗?

我发现很多库都会对调用进行排队 - 或按时间限制请求。我将如何在用户基础上实现这一点?

<小时/>

编辑

示例:我有两个登录用户。完全执行myFunction('some http request')大约需要3-5秒

  1. user1 调用 myFunction() -> 立即执行

  2. user2 调用 myFunction() -> 立即执行

  3. 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/

相关文章:

javascript - 如何在带有标签 div 或其他的 <body> 中调用扩展 .js 文件中的函数

javascript - 我应该在每次使用 ExpressJS/Node 进行更改时重新启动应用程序服务器吗?

node.js - 安装reactjs时出错: Error unexpected end of JSON input while parsing near

node.js - 使用 Node 路由页面时出错错误代码 :Error: ENOENT, stat '/public/index.html'

javascript - javascript中的毫秒时间

javascript 包含无法在 chrome 上运行

javascript - 如何在angularjs中获取输入类型文件的值?

javascript - 无法读取未定义的属性 'cnt'

javascript - 如何在请求之外以 express 方式访问 session ?

javascript - 我在express js中丢失了我的URL