Connexion объект Singleton в реагировать родной - PullRequest
1 голос
/ 11 апреля 2019

Я пытаюсь создать одноэлементный класс обслуживания, в котором я создаю экземпляр объекта подключения, который подключается к бэкэнду, чтобы повторно использовать объект подключения в каждом компоненте, поэтому я сделал это:

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.log(JSON.stringify(kuzzleService.kuzzle));
 }

Это дает мне «неопределенное».Стоит ли импортировать услугу другим способом?

1 Ответ

2 голосов
/ 11 апреля 2019

Вероятно, это связано с тем, что при экспорте kuzzleService обещание, данное .getInstance(), еще не выполнено.

Вы должны экспортировать функцию .getInstance и ждать ее в componentDidMount, например:

export default KuzzleService; // export the singleton directly
async componentDidMount(){
    const kuzzle = await KuzzleService.getInstance();
    console.log(kuzzle);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...