Was ist eine Funktion, die ein Versprechen zurückgibt?

8

Wie nennt man eine Funktion, die ein Versprechen zurückgibt?

Dies ist nicht der Anfang eines Witzes

    
Ross 11.05.2015, 16:17
quelle

5 Antworten

5

In der JavaScript-Community habe ich eine Funktion gesehen, die ein Versprechen zurückgibt, das oft "thenable" genannt wird, das ich " thenable " beim Codieren finde. Es ist eine thenable-Funktion .

Ich mag diesen Namen aus einer Reihe von Gründen:

1) Thenable beschreibt das funktionale Verhalten. Wenn es eine Zusage zurückgibt, können Sie "then" aufrufen.

2) Es ist einzigartig. Versprechen sind nicht genau monadisch, also ist Monade nicht angemessen. "Async" ist eher eine Superklasse von Funktionen und hilft nicht, das Wesen eines Versprechens zu beschreiben. Aber "thenable" ist einzigartig Promisely.

3) Ich mag es auch, dass es keine Promise überall wiederholt (Promissory, Promisified, Promise Function, etc.), die sich einer zirkulären Definition IMO nähert. In der Lage zu sein, ein Wort zu googeln, das eine bestimmte Bedeutung hat, ist wirklich nett.

    
Christian Davis 14.10.2015, 18:51
quelle
8

Nun ...

Die aktuellen Antworten sind nicht wirklich korrekt. Die Wahrheit der Sache ist es gibt keinen kurzen klugen Namen für "Funktion, die ein Versprechen zurückgibt" das ist im Konsens der JS-Gemeinschaft.

In JavaScript

Die Spezifikation benennt sie nicht auf eine besondere Weise, keine Dokumentation irgendeiner populären Bibliothek benennt sie auf eine spezielle Art und Weise. Die Spezifikation der Versprechen nennt sie nicht in besonderer Weise.

Der Ursprung von Versprechen

Andererseits, wenn wir den Literaturzweig überprüfen, der von Liskov und Shrira stammt, dann tun sie das nicht 't, und auch nicht Bogle noch Zondervan verwenden einen anderen Begriff als" ein Versprechen zu bekommen "oder" die Zukunft zu bekommen "Dafür (sie verwenden claim zum Extrahieren des Wertes).

Wenn wir Mark Millers Arbeit überprüfen, verwendet er auch keine Begriffe dafür.

Andere Sprachen

In anderen Sprachen geht es nicht besser. C # hat keinen speziellen Namen für Methoden, die Task s (ihre Versprechen) zurückgeben. Es hat "Async-Funktionen" für Funktionen, die async / await zurückgeben, aber das ist nur eine strikte Untermenge. Kein spezieller Name in Scala, kein spezieller Name in Python, kein spezieller Name in Java und so weiter. Das einzige, was close war, war die Android-API von parse, die ihre Versprechen ' then callbacks Continuation nannte, aber das ist in diesem Zusammenhang kaum sinnvoll.

Namensvorschläge

Wenn Sie sich besser fühlen - wir haben keinen Namen für etwas, das ein Array zurückgibt.

  • "Monadische Funktionen" - Viele Funktionen können Monaden zurückgeben, die keine Versprechen sind, außerdem sind Versprechen keine Monaden - sie passen sich nicht in ihrer aktuellen Form der Monade an Gesetze noch macht then eine gültige bind . Noch wichtiger ist, dass nur sehr wenige JS-Entwickler wissen, was Monaden sind und noch weniger Pflege.
  • "async-Funktion" - dies könnte gelten, wenn (und wenn! es ist jetzt nicht 100% sicher) der async -Modifikator der Sprache hinzugefügt wird. Im Moment und wahrscheinlich als Ereignis betrachten viele Leute Dinge wie setTimeout oder fs.openFile als asynchrone Funktionen.
  • "Kleisli Arrows" - Ich habe einen Kurs über Typentheorie gemacht und es hat dieses Thema behandelt und ich denke nicht, dass ich oder andere Studenten eine Funktion nennen würden, die eine Monade als Kleisli Pfeil zurückgibt. Zum einen, weil es ein Pfeil ist (ja, Pfeile sind Funktionen, die ich bekomme).

Fazit

Zusammenfassend, die Leute, die erfunden haben, die Leute, die sie für JavaScript spezifiziert haben, die Leute, die diese Spezifikation geschrieben haben, die Spezifikation selbst, die Versprechens-Bibliotheken, die Bibliotheken, die mit denen geschrieben wurden und der durchschnittliche Benutzer nicht irgendeinen speziellen Namen dafür.

Ich denke, wir können bei eine Funktion bleiben, die ein Versprechen zurückgibt .

Wenn Sie sich dadurch besser fühlen - wir nennen keine "Funktionen, die einen int zurückgeben" entweder :)

    
Benjamin Gruenbaum 12.05.2015 01:03
quelle
2

Wir nennen sie asynchrone Funktionen . Selbst wenn die Funktion selbst nichts Asynchrones tut, gibt sie zumindest ein Versprechen zurück - einen asynchronen Wert.

Sie können das auf async function verkürzen, obwohl dieser Begriff auch für die ES7 syntaktische Notation async function verwendet wird, die Funktionen erzeugt, die Versprechen implizit zurückgeben (deren Code await verwenden kann) / p>

Wenn Sie an die Art von Funktionen denken möchten, die Monaden zurückgeben (was verspricht), können Sie sie Kleisli Pfeile . Aber du hast eine [Javascript] -Frage gestellt, keine [Typentheorie], oder?

    
Bergi 11.05.2015 16:57
quelle
2

Nach meiner Erfahrung gibt es keine einzelnen Wörter, um Funktionen zu beschreiben, die einen bestimmten Typ zurückgeben. Sie werden allgemein als "eine Funktion bezeichnet, die ein & lt; Type & gt; " zurückgibt.

Zum Beispiel:

  • foo() ist eine Funktion, die einen String zurückgibt
  • bar() ist eine Funktion, die eine Zahl zurückgibt
  • baz() ist eine Funktion, die ein Versprechen zurückgibt

In diesem Kontext wird Promise ähnlich wie eine Schnittstelle in einer stark typisierten Sprache verwendet.

Ein anderes Beispiel für einen generischen Typ wäre

  • fizz() ist eine Funktion, die eine Sammlung zurückgibt

Das heißt nicht, dass es kein Wort mit einer Definition von "einer Funktion geben kann, die ein Versprechen " zurückgibt, aber es gibt kein allgemein verwendetes Jargon, um dies zu beschreiben.

"Deferred Function" wird manchmal verwendet, um eine Funktion zu beschreiben, die Versprechen oder Versprechen-ähnliche Objekte (d. h. jQuery's Deferred Object) zurückgibt.

Funktionen, die Versprechungen zurückgeben, können auch durch andere allgemeinere Wörter beschrieben werden (ähnlich wie ein Quadrat als Rechteck, Parallelogramm, Rhombus oder Viereck beschrieben werden kann).

  • Versprechen sind Monaden, also können sie als "monadisch" beschrieben werden.
  • Versprechen sind asynchron, so dass Funktionen, die sie nutzen, auch als asynchron beschrieben werden können.

Ich persönlich würde "Promissory Functions" wählen, da "Promissory" bedeutet:

  

vermitteln oder ein Versprechen geben

und mir gefällt die Idee, dass der Rückgabewert einer solchen Funktion "ein Versprechen" ist.

    
zzzzBov 11.05.2015 16:55
quelle
1

Technisch gesehen ist ein Versprechen eine Monade . Daher ist eine Funktion, die ein Versprechen zurückgibt, eine monadische Funktion .

    
Aadit M Shah 11.05.2015 16:50
quelle

Tags und Links