JavaScript: асинхронно создайте экземпляр и используйте его в разных модулях - PullRequest
1 голос
/ 12 июня 2019

Я создаю небольшой веб-чат.Служба, которую я использую для чата, требует от меня создания клиента на внешнем интерфейсе, который затем я могу использовать для общения.Код выглядит следующим образом:

import Client from 'some-chat-service'

async function connect() {
    const token = await getToken() // first need to get token from backend
    const client = await Client.create(token) // then we can create client instance
}

Теперь проблема в том, что я не могу использовать client где-либо еще (в разных файлах), потому что он объявлен в функции connect.

Обходной путь может выглядеть следующим образом:

import Client from 'some-chat-service'

export let client;

async function connect() {
    const token = await getToken()
    client = await Client.create(token)
}
connect()

Теперь мы можем использовать клиент где угодно, но мне это кажется очень странным.

Знаете ли вы, как справиться с такой проблемой

1 Ответ

2 голосов
/ 12 июня 2019

Куда вы хотите позвонить connect?Если импортирующий модуль должен вызвать его, то просто return клиент из функции, если экспортирующий модуль должен запустить само соединение (как в вашем втором фрагменте), тогда вы должны экспортировать обещание:

export const clientPromise = getToken().then(Client.create);

// or with async/await:
async function connect() {
    const token = await getToken()
    return Client.create(token)
}
export const clientPromise = connect()

В любом случае импортирующий модуль должен будет дождаться обещания инициализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...