Encontré este ejemplo de cómo implementar un método Promise.all.
function all(iterable){ // take an iterable // `all` returns a promise. return new Promise(function(resolve, reject){ let counter = 0; // start with 0 things to wait for let results = [], i; for(let p of iterable){ let current = i; counter++; // increase the counter Promise.resolve(p).then(function(res){ // treat p as a promise, when it is ready: results[i] = res; // keep the current result if(counter === 0) resolve(results) // we're done }, reject); // we reject on ANY error i++; // progress counter for results array } }); } No estoy seguro de qué está pasando con esta línea de código: let results = [], i;
Cuando ejecuto eso en la consola, se vuelve indefinido. En la función all, están haciendo i ++, pero usar ese operador en un valor indefinido se convierte en NaN. ¿Que esta pasando aqui? Si 'i' no está definido, ¿cómo pueden usarlo como un índice en una matriz para results[i] = res; // keep the current result ?
let results = [], i;es equivalente a
let results = []; let i;let results = [], i;es lo mismo que:
let results = []; let i; Obtengo el valor undefined . Cualquier matemática en indefinido devolverá NaN , no un número.
console.log(undefined + 1);