Вот как обрабатываются обещания с использованием Promise.all . Pu sh обещание в массив. Чем разрешить этот массив обещаний, который даст массив значений.
var promises = [];
for (let url of urls) {
// Save promise in p
let p = $.get(url)
// push promise p in promises array
promises.push(p);
}
// resolve all promises
Promise.all(promises).then(function (results) {
console.log(results);
});
Исходный код не работает, поскольку для каждого URL-адреса значение, сохраненное в p, является обещанием, которое будет преобразовано в неопределенное, как тогда ничего не возвращает.
(function () {
let promises = [], results = [];
const urls = ["https://cdn.jsdelivr.net/gh/rails/rails/MIT-LICENSE"];
for (let url of urls) {
let p = $.get(url).then(d => {
results.push(d);
// return the value
return d;
});
promises.push(p);
}
console.log("Start");
console.log(promises);
Promise.all(promises).then(function () {
console.log("Done");
console.log(results);
});
})();
Это будет работать.