JavaScript:异步创建实例并在不同模块中使用
我正在建立一个小的网络聊天。我用于聊天的服务要求我在前端创建一个客户端,然后我可以使用该客户端进行通信。代码如下所示:JavaScript:异步创建实例并在不同模块中使用,javascript,asynchronous,module,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) //
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
}
import Client from 'some-chat-service'
export let client;
async function connect() {
const token = await getToken()
client = await Client.create(token)
}
connect()
现在,问题是我不能在其他任何地方(不同的文件中)使用客户机,因为它是在connect
函数中声明的
解决方法如下所示:
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
}
import Client from 'some-chat-service'
export let client;
async function connect() {
const token = await getToken()
client = await Client.create(token)
}
connect()
现在,我们可以在任何我们想要的地方使用客户端,但在我看来它非常奇怪
您知道如何处理此类问题吗?您想在哪里呼叫connect
?如果导入模块应该调用它,那么只需从函数中返回客户机,如果导出模块应该启动连接本身(如第二个代码段),那么您应该导出一个承诺:
export const clientPromise = getToken().then(Client.create);
在任何情况下,导入此功能的模块都需要等待初始化承诺。问得好!我认为它应该自动连接,因为它可以在许多模块中使用。知道了!理想情况下,我应该返回客户端,然后执行,export const client=connect()
?:)非常感谢。不,(没有)您不能立即导出异步创建的客户机,您只能为它导出承诺。这正是我想要做的(您的异步/等待示例)。非常感谢。