Я пробовал различные упражнения вокруг асинхронного ожидания и обнаружил и странное поведение, которое я не могу объяснить между циклом просмотра карты и массива
С картой:
async function loadFiles(files) {
var prs = files.map(getFile);
for (let pr of prs) {
console.log(await pr);
}
}
С помощью массива push:
async function loadFiles(files) {
let prs = [];
files.forEach(file => {
prs.push(getFile(file));
});
for (let pr in prs) {
console.log(await prs[pr]);
}
}
Теперь оба дают одинаковые результаты, и я не могу понять, почему в случае отправки в массив pr является индексом массива, но с картой это непосредственно результат обещания
они оба являются массивом обещаний, что заставляет их вести себя по-разному в for?
остальной код:
function getFile(file) {
return new Promise(function(resolve) {
fakeAjax(file, resolve);
});
}
loadFiles(["file1", "file2", "file3"]);
// **************************************
function fakeAjax(url, cb) {
var fake_responses = {
file1: "The first text",
file2: "The middle text",
file3: "The last text"
};
var randomDelay = (Math.round(Math.random() * 1e4) % 8000) + 1000;
console.log("Requesting: " + url);
setTimeout(function() {
cb(fake_responses[url]);
}, randomDelay);
}