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.
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.
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:
Ich hoffe, es hilft.
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. :)
Tags und Links javascript arrays async-await filter