Создание функции в цикле, замыкания, промисы
Добрый день!
Пишу юзерскрипт. Есть примерно такой код: 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 не советует так делать (предупреждение "Создание функции в цикле"). Как быть? |
Попробуйте так:
function runTest(){ let promises = []; for (let i = 0; i<10; i++){ const getPromise = i => new Promise(resolve => { setTimeout(()=>{ console.log(i); resolve(); }, 100); }); promises.push( getPromise(i) ); } Promise.all(promises).then(() => { console.log("Done"); }); } |
Nexus имел ввиду вот так:
function runTest(){ let promises = []; const getPromise = i => new Promise(resolve => { setTimeout(()=>{ console.log(i); resolve(); }, 100); }); for (let i = 0; i<10; i++){ promises.push( getPromise(i) ); } Promise.all(promises).then(() => { console.log("Done"); }); } Только это всё равно создание функций в цикле.) И в принципе это абсолютно нормально для таких случаев, любые альтернативы имеют мало смысла. Tampermonkey тут идёт нафиг. |
Спасибо за ответы!
|
Aetae, нет, я просто ошибся объявив функцию в цикле.
Спасибо, что поправили :) |
Часовой пояс GMT +3, время: 21:20. |