403Webshell
Server IP : 80.87.202.40  /  Your IP : 216.73.216.169
Web Server : Apache
System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64
User : bitrix ( 600)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF |  cURL : ON |  WGET : ON |  Perl : ON |  Python : OFF |  Sudo : ON |  Pkexec : ON
Directory :  /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/v2/component/dialog/chat/src/helpers/

Upload File :
current_dir [ Writeable] document_root [ Writeable]

 

Command :


[ Back ]     

Current File : /home/bitrix/ext_www/cvetdv.ru/bitrix/js/im/v2/component/dialog/chat/src/helpers/sequentialize.js
type Task = {
	args: Array<any>,
	resolve: (result: any) => void,
};

const sharedQueues: Map<string, (...args: any[]) => Promise<any>> = new Map();

/**
 * @description
 * Adds a delay between calls to the fn function.
 * Calls with the same function execute this function in the same sequence
 * @param fn
 * @param delay
 * @param context
 * @returns Function
 */
function sequentializeShared(
	fn: (...args: any[]) => any,
	delay: number,
	context: any = null,
): (...args: any[]) => Promise<any>
{
	if (sharedQueues.has(fn))
	{
		return sharedQueues.get(fn);
	}

	const wrapped = sequentialize(fn, delay, context);
	sharedQueues.set(fn, wrapped);

	return wrapped;
}

function sequentialize(
	fn: (...args: any[]) => any,
	delay: number,
	context: any = null,
): (...args: any[]) => Promise<any>
{
	const queue: Array<Task> = [];
	let isRunning = false;

	async function run(): Promise<void>
	{
		if (isRunning)
		{
			return;
		}

		isRunning = true;

		const task = queue.shift();

		if (!task)
		{
			isRunning = false;

			return;
		}

		const result = fn.apply(context, task.args);
		await wait(delay);
		task.resolve(result);

		isRunning = false;

		run();
	}

	return (...args: any[]): Promise<any> => {
		return new Promise((resolve) => {
			queue.push({ args, resolve });
			run();
		});
	};
}

function wait(ms: number): Promise<void>
{
	return new Promise((resolve) => {
		setTimeout(resolve, ms);
	});
}

export { sequentializeShared as sequentialize };

Youez - 2016 - github.com/yon3zu
LinuXploit