リモートサービスに接続するES2015クラスがあります。ES2015では、すべてのメソッドがオブジェクトの初期化を待つようにする方法はありますか? ES7デコレータでは?
問題は、オブジェクトがリモートサーバーへの接続を終了する前に、自分のコードがこのクラスにアクセスしようとしていることです。
オブジェクトが初期化を完了していない場合にメソッドがエラーを出さないようにしたいと思います。
接続に依存しているクラスにはたくさんのメソッドがありますので、@ensureConnectedのようなすべてのメソッドに適用できる単一の理解しやすいメカニズムがあれば良いでしょう。デコレータ。ここ
フィドル: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)
私は接続が確立されるかどうかを確認するためのテストを実施することES7のデコレータを使用して画像化されたが、私はそうすることをどのように見ることができません。
クライアントコンストラクタにコールバックパラメータを追加し、コールバック関数を渡し、サーバが応答した後にその関数を呼び出し、コールバックから他のクライアントメソッドを呼び出します。 –
参考までに、デコレータはES7(ES2016)の一部ではありません。 –
related:[コンストラクタ関数がPromiseを返すのは悪い習慣ですか?](http://stackoverflow.com/q/24398699/1048572) - 準備ができたらインスタンスを作成します。 – Bergi