В ES2015, как я могу гарантировать, что все методы ждут инициализации объекта? С ES7 декораторами?
У меня есть класс ES2015, который подключается к удаленному сервису.
Проблема в том, что мой код пытается получить доступ к этому классу до того, как его объект завершил соединение с удаленным сервером.
Я хочу убедиться, что методы не просто выдают ошибку, если объект не завершил инициализацию.
В моем классе будет много методов, которые зависят от того, какое соединение установлено и работает, поэтому было бы хорошо, если бы существовал единый, простой для понимания механизм, который можно было бы применить ко всем методам, таким как @ensureConnected decorator.
Скрипка здесь: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-декораторы для реализации теста, чтобы увидеть, установлено ли соединение, но я не вижу, как это сделать.