Kann async / await für Konstruktoren verwendet werden?

8

Wie die Frage gesagt hat. Darf ich das tun?

%Vor%     
wintercounter 01.04.2016, 18:21
quelle

4 Antworten

10

Ohne zu versuchen, über zukünftige Entscheidungen zu berichten, konzentrieren wir uns auf die praktischen Aspekte und das, was bereits bekannt ist.

ES7, wie ES6, bevor es versuchen wird, eine rückwärtskompatible Erweiterung der Sprache zu sein. Vor diesem Hintergrund ist eine abwärtskompatible Konstruktorfunktion im Wesentlichen eine reguläre Funktion (mit einigen Laufzeitbeschränkungen), die mit dem Schlüsselwort new aufgerufen werden soll. Wenn dies geschieht, wird der Rückgabewert der Funktion speziell behandelt, speziell werden Nicht-Objekt-Rückgabewerte ignoriert und das neu zugeordnete Objekt wird zurückgegeben, während Objekt-Rückgabewerte unverändert zurückgegeben werden (und das neu zugeordnete Objekt verworfen wird). Damit würde Ihr Code dazu führen, dass ein Versprechen zurückgegeben wird und keine "Objektkonstruktion" stattfindet. Ich sehe die Praktikabilität davon nicht und ich nehme an, wenn jemand sich die Zeit nimmt, um herauszufinden, was mit einem solchen Code zu tun ist, wird er abgelehnt.

    
Amit 01.04.2016, 18:32
quelle
9

Auf den Punkt gebracht:

  1. Konstruktor ist eine Funktion, die ein konkretes Objekt bereitstellen muss.
  2. Async gibt ein Versprechen zurück; genau entgegengesetzt der Konkretheit.
  3. async constructor ist konzeptionell widersprüchlich.
user900360 08.04.2016 04:57
quelle
8

Um zu erweitern, was Patrick Roberts gesagt hat, können Sie nicht tun, was Sie fragen, aber Sie können stattdessen Folgendes tun:

%Vor%

Dann in Ihrem Code erstellen Sie Ihr Objekt wie folgt:

%Vor%     
Dave P. 29.11.2017 18:00
quelle
1

Sie können eine Zusage vom Rückgabewert erhalten und darauf warten:

%Vor% %Vor%
    
Ben Atkin 02.01.2018 22:23
quelle