Показать сообщение отдельно
  #1 (permalink)  
Старый 26.08.2019, 15:49
Аватар для b5414
Новичок на форуме
Отправить личное сообщение для b5414 Посмотреть профиль Найти все сообщения от b5414
 
Регистрация: 30.06.2019
Сообщений: 3

Выполнение N async параллельных скриптов, с лимитом и ожиданием их выполнения
Всем привет, не могу решить задачу, nodejs, сижу 3 день... Задача сложна, и мне слов не хватает описать её, связи с этим представляю несколько описаний

Суть задачи:
Нужно запустить asd - N раз, параллельно и с лимитом.
Если одна из N завершилась, смотреть лимит, запускать asd до лимита опять. Ждать ответ из asd, добавлять его в пелеменную... и вся эта махинация до окончания массива который передается в asd.

:
const Asd=async(a)=>{
	let b = await some(a);
	return b;
};


Или так, НО без await на 14 строке, а т.е. параллельное выполнение и ожидания ответов так же параллельно от каждой, исполнение до конца массива с лимитом в 4(например)
const asd=async(a)=>{
	return a*2;
};

const main=async()=>{
	let URL = [1,2,3,4,5];
	let x = [];
	let k = 0;
	let limit = 4;
	
	while(URL.length > 0){
		while(k < limit && URL.length > 0){
			k++;
			let g = await asd(URL.shift()).then((r)=>{
				k--;
				return r;
			});
			x.push(g.toString());
		}
	}
	
	return x;
};

const a=async()=>{
	let x = await main();
	console.log(x);
};
a();


Или так: Нужно открыть браузер, открыть в нем 4 вкладки из массива ЮРЛ, как только работа в одной из вкладок проделана(из asd return b) и вкладка закрылась, если ЮРЛ.length > 0 запускать еще вкладку до лимита 4

Или так: Есть работающий код, который запускает asd(в котором парсится страница, он асинхронен и в нём присутствует await), код ожидает ответа от asd, затем запускает asd заново, покуда URL лист не иссякнет, после окончания массива выдает общий результат asd(часть всех страниц). Дак вот, как запускать asd параллельно N раз, с лимитом N в K(4 asd максимум)
Ответить с цитированием