Wie verwende ich Array.prototype.filter mit async?

10

Hintergrund

Ich versuche ein Array von Objekten zu filtern. Bevor ich filtere, muss ich sie in ein Format konvertieren, und diese Operation ist asynchron.

%Vor%

Also, mein erster Versuch war etwas wie folgt mit async / await zu machen:

%Vor%

Nun, wie einige von euch vielleicht wissen, ist Array.protoype.filter eine Funktion, deren Callback entweder wahr oder falsch zurückgeben muss. filter ist synchron. Im vorherigen Beispiel gebe ich keine von ihnen zurück, ich gebe ein Versprechen zurück (alle asynchronen Funktionen sind Versprechen).

Ссылка

So wie man annehmen kann, funktioniert der Code vorher nicht wirklich ... Diese Annahme ist richtig.

Problem

Damit Filter mit einer asynchronen Funktion funktionieren, habe ich stackoverflow überprüft und folgendes Thema gefunden:

Filtern eines Arrays mit einer Funktion, die a zurückgibt Versprechen

Leider ist die gewählte Antwort zu komplex und verwendet Klassen. Das wird nicht für mich tun. Ich suche stattdessen nach einer einfacheren Lösung, die einfache Funktionen mit einem funktionalen Ansatz verwendet.

Am Ende gibt es eine Lösung, die eine Karte mit einem Callback verwendet, um einen Filter zu simulieren:

Ссылка

Aber ich hatte gehofft, meine Filterfunktion zu reparieren, nicht um sie zu ersetzen.

Fragen

  • Gibt es eine Möglichkeit, eine asynchrone Funktion in einem Filter zu verwenden?
  • Wenn nicht, was ist der einfachste Ersatz, den ich tun kann?
Flame_Phoenix 03.11.2017, 11:45
quelle

2 Antworten

5

Es gibt keine Möglichkeit, einen Filter mit einer asynchronen Funktion zu verwenden (zumindest soweit ich weiß). Der einfachste Weg, den Filter mit einer Sammlung von Versprechen zu verwenden, besteht darin, Promise.all zu verwenden und dann die Funktion auf Ihre Sammlung von Ergebnissen anzuwenden. Es würde ungefähr so ​​aussehen:

%Vor%

Ich hoffe, es hilft.

    
mcousillas 03.11.2017, 11:54
quelle
1

Verwenden Sie Scramjet vonArray / toArray-Methoden ...

%Vor%

so einfach - hier ist ein einfaches Beispiel zum Kopieren / Einfügen:

%Vor%

Disclaimer: Ich bin der Autor von Scramjet. :)

    
Michał Czapracki 18.11.2017 16:05
quelle