Следующий пример кода меня смущает...
"use strict";
var filesToLoad = [ 'fileA','fileB','fileC' ];
var promiseArray = [];
for( let i in filesToLoad ) {
promiseArray.push(
new Promise( function(resolve, reject ) {
setTimeout( function() {
resolve( filesToLoad[i] );
}, Math.random() * 1000 );
})
);
}
Promise.all( promiseArray ).then(function(value) {
console.log(value);
});
Причина, по которой я смущен, заключается в том, что я ожидал случайного упорядоченного вывода на консоль. Но я всегда получаю следующее...
['файлA', 'файлB', 'файлC']
Меня это, мягко говоря, немного смущает, но что действительно заставляет меня почесать голову, так это то, что когда я меняю let i на var i, я получаю следующий результат....
['файлC', 'файлC', 'файлC']
Как человек, который только недавно пытался полностью понять Promises и не так давно начал использовать let, я действительно в тупике.
Дальнейшее чтение...
Получив много отличных ответов, я переработал пример, чтобы избавиться от цикла и i. Большинству покажется очевидным, но для меня забавным...
"use strict";
var filesToLoad = [ 'fileA','fileB','fileC' ];
function start( name ) {
return new Promise( function(resolve, reject ) {
setTimeout( function() {
resolve( name + '_done' );
}, Math.random() * 1000 );
});
}
Promise.all( filesToLoad.map(start) ).then(function(value) {
console.log(value);
});