JavaScript:异步创建实例并在不同模块中使用它

时间:2019-06-12 15:00:24

标签: javascript asynchronous module

我正在建立一个小型网络聊天。我用于聊天的服务要求我在前端创建一个客户端-然后可以使用该客户端进行通信。代码如下:

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 个答案:

答案 0 :(得分:2)

您要在哪里致电connect?如果导入模块应该调用它,则只需return从该函数的客户端开始,如果导出模块应该启动连接本身(如第二个片段中所示),则应该导出一个Promise:

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()

无论如何,导入该模块的模块将需要等待初始化承诺。