Filtern von einem array mit einer Funktion, die eine Zusage zurückgibt

Gegeben

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
 });

Die Länge ist 3, weil die Versprechungen sind zurückgekehrt, nicht um Werte. Gibt es eine Möglichkeit, filter-array mit einer Funktion, die eine Zusage zurückgibt?

Hinweis: Für dieses Beispiel, fs.stat wurde ersetzt mit setTimeout finden Sie https://github.com/silenceisgolden/learn-esnext/blob/array-filter-async-function/tutorials/array-filter-with-async-function.js für den spezifischen code.

InformationsquelleAutor der Frage ajklein | 2015-10-26

Schreibe einen Kommentar