У меня есть эти два разных кода, которые немного отличаются, но дают разные результаты:
(async () => {
const results = new Array(concurrentBrowsers).fill({});
const browsers = [];
for (let index = 0; index < concurrentBrowsers; index++) {
browsers.push(
(async function() {
let i = index;
const browser = await puppeteer.launch({ headless });
const page = await getNewPage({ browser });
results[i].loginPage = await timer(actions.loginPage, { page }); // <---- this line
results[i].homePage = await timer(actions.homePage, {
page,
username,
password
});
console.log(i, results[i]);
browser.close();
})()
);
}
await Promise.all(browsers);
})();
Что приводит к
1 { loginPage: 2.924, homePage: 19.939 }
2 { loginPage: 2.924, homePage: 21.388 }
3 { loginPage: 2.924, homePage: 21.122 }
0 { loginPage: 2.924, homePage: 21.305 }
4 { loginPage: 2.924, homePage: 21.6 }
И еще один:
(async () => {
const results = new Array(concurrentBrowsers).fill({});
const browsers = [];
for (let index = 0; index < concurrentBrowsers; index++) {
browsers.push(
(async function() {
let i = index;
const browser = await puppeteer.launch({ headless });
const page = await getNewPage({ browser });
let loginPageTime = await timer(actions.loginPage, { page }); // <---- this line
let homePageTime = await timer(actions.homePage, {
page,
username,
password
});
results[i].loginPage = loginPageTime;
results[i].homePage = homePageTime;
console.log(i, results[i]);
browser.close();
})()
);
}
await Promise.all(browsers);
})();
Что приводит к
2 { loginPage: 3.291, homePage: 17.911 }
4 { loginPage: 3.226, homePage: 18.949 }
1 { loginPage: 3.047, homePage: 22.619 }
0 { loginPage: 3.291, homePage: 24.508 }
3 { loginPage: 3.059, homePage: 26.391 }
В первом коде есть ошибка, кажется, что результат loginPage
всегда берется из последней итерации и, как вы можете видеть, устанавливается на одно и то же значение во всех итерациях.
Единственная разница в том, что я присваиваю результат таймера в первом примере results[i].loginPage
, а во втором примере loginPageTime
.
Может кто-нибудь объяснить эту разницу?
Спасибо