Я пытаюсь создать одноэлементный класс обслуживания, в котором я создаю экземпляр объекта подключения, который подключается к серверной части, чтобы повторно использовать объект подключения в каждом компоненте, поэтому я сделал это:
const {
Kuzzle,
WebSocket
} = require('kuzzle-sdk');
class KuzzleService {
static instance = null;
static async createInstance() {
var object = new KuzzleService();
object.kuzzle = new Kuzzle(
new WebSocket('localhost'),{defaultIndex: 'index'}
);
await object.kuzzle.connect();
const credentials = { username: 'user', password: 'pass' };
const jwt = await object.kuzzle.auth.login('local', credentials);
return object;
}
static async getInstance () {
if (!KuzzleService.instance) {
KuzzleService.instance = await KuzzleService.createInstance();
}
return KuzzleService.instance;
}
}
const kuzzleService = KuzzleService.getInstance();
export default kuzzleService;
Но когда я импортирую службу в компонент следующим образом:
import kuzzleService from "../services/kuzzle-service.js";
И я печатаю это:
async componentDidMount(){
console.info(JSON.stringify(kuzzleService.kuzzle));
}
Это дает мне «неопределенное». Должен ли я импортировать службу другим способом?
Вероятно, это связано с тем, что при экспорте kuzzleService
обещание, данное .getInstance()
, еще не выполнено.
Вы должны экспортировать функцию .getInstance
и ожидать ее в componentDidMount
, например:
export default KuzzleService; // export the singleton directly
async componentDidMount(){
const kuzzle = await KuzzleService.getInstance();
console.info(kuzzle);
}
Спасибо команде Kuzzle ;)