Учитывая
let arr = [1,2,3];
function filter(num) {
return new Promise((res, rej) => {
setTimeout(() => {
if( num === 3 ) {
res(num);
} else {
rej();
}
}, 1);
});
}
function filterNums() {
return Promise.all(arr.filter(filter));
}
filterNums().then(results => {
let l = results.length;
// length should be 1, but is 3
});
Длина равна 3, потому что возвращается Promises, а не значения. Есть ли способ фильтровать массив с функцией, которая возвращает Promise?
Примечание. В этом примере fs.stat был заменен на setTimeout, см. https://github.com/silenceisgolden/learn-esnext/blob/array-filter-async-function/tutorials/array-filter-with-async-function.js для конкретного кода.