Создание функции в цикле, замыкания, промисы
Добрый день!
Пишу юзерскрипт. Есть примерно такой код:
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, время: 11:56. |