Показать сообщение отдельно
  #9 (permalink)  
Старый 30.05.2019, 15:30
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Сообщение от DarkPhoenix
P.S. нельзя юзать promise.all
А зря вы так себя ограничили! Было бы так...
function request(url) {
	return new Promise((res,rej) => {
		const delayTime = Math.floor(Math.random() * 10000) + 1;

		setTimeout(() => (console.log(url), res(url)), delayTime);
	});
}

function willGetUrls(urls) {
	return Promise.all(urls.map(request));
}

var urls = ["simon", "david", "chak", "richard"];
willGetUrls(urls).then(console.log);


Но и без статичного метода Promise.all тоже можно попробовать...
function request(url) {
	return new Promise((res,rej) => {
		const delayTime = Math.floor(Math.random() * 10000) + 1;

		setTimeout(() => (console.log(url), res(url)), delayTime);
	});
}

function willGetUrls(urls) {
	return new Promise(resolve => {
		urls.map(request).reduce(async (resultP, promise, index, promises) => {
			let { result = [], count = 0 } = await resultP;
			result[index] = await promise;
			if(promises.length === ++count) resolve(result);
			return { result, count };
		}, {});
	});
}

var urls = ["simon", "david", "chak", "richard"];
willGetUrls(urls).then(console.log);
Ответить с цитированием