Показать сообщение отдельно
  #1 (permalink)  
Старый 22.02.2020, 14:03
Новичок на форуме
Отправить личное сообщение для fjay69 Посмотреть профиль Найти все сообщения от fjay69
 
Регистрация: 22.02.2020
Сообщений: 2

Создание функции в цикле, замыкания, промисы
Добрый день!
Пишу юзерскрипт.
Есть примерно такой код:
function runTest(){
	let callback = () => {
		console.log("Done");
	};
	let promises = [];
	let i = 0;
	let someFunct = resolve => {
		setTimeout(()=>{
			console.log(i); //Всегда 10
			resolve();
		}, 100);
	};

	for (; i<10; i++){
		promises.push(new Promise(someFunct));
	}

	Promise.all(promises).then(() => callback());
}

В консоль 10 раз подряд выводится 10. Что я делаю не так?
Если убрать setTimeout, работает нормально, но представьте себе, что тут get-запрос...
Я могу поместить создание функции в цикл:
function runTest(){
	let callback = () => {
		console.log("Done");
	};
	let promises = [];

	for (let i = 0; i<10; i++){
		let someFunct = resolve => {
			setTimeout(()=>{
				console.log(i);
				resolve();
			}, 100);
		};
		promises.push(new Promise(someFunct));
	}

	Promise.all(promises).then(() => callback());
}

и тогда всё работает, но Tampermonkey не советует так делать (предупреждение "Создание функции в цикле"). Как быть?
Ответить с цитированием