In ES2015 wie kann ich sicherstellen, dass alle Methoden auf die Initialisierung des Objekts warten? Mit ES7 Dekorateuren?

Ich habe eine ES2015-Klasse, die eine Verbindung zu einem Remotedienst herstellt.

Das Problem ist, dass mein Code versucht, auf diese Klasse zuzugreifen, bevor das Objekt die Verbindung zum Remote-Server hergestellt hat.

Ich möchte sicherstellen, dass Methoden nicht nur einen Fehler ausgeben, wenn die Initialisierung des Objekts noch nicht abgeschlossen ist.

Ich werde in meiner Klasse viele Methoden haben, die davon abhängen, ob die Verbindung funktioniert. Es wäre also gut, wenn es einen einzigen, leicht verständlichen Mechanismus gäbe, der auf alle Methoden angewendet werden könnte, z. B. auf einen @ensureConnected-Dekorator.

Geige hier:https: //jsfiddle.net/mct6ss19/2

'use strict';

class Server {
    helloWorld() {
        return "Hello world"
    }
}

class Client {
    constructor() {
            this.connection = null
            this.establishConnection()
    }

    establishConnection() {
        // simulate slow connection setup by initializing after 2 seconds
        setTimeout(() => {this.connection= new Server()}, 2000)
    }

    doSomethingRemote() {
            console.log(this.connection.helloWorld())
    }

}

let test = new Client();
// doesn't work because we try immediately after object initialization
test.doSomethingRemote();
// works because the object has had time to initialize
setTimeout(() => {test.doSomethingRemote()}, 3000)

Ich habe mit ES7-Dekoratoren einen Test durchgeführt, um festzustellen, ob die Verbindung hergestellt wurde, aber ich kann nicht feststellen, wie dies funktioniert.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage