我刚刚开始使用async-await,我想知道你是否可以递归调用异步函数而不会遇到麻烦。
我在init函数中打开Websocket连接。在我的真实程序中,init函数更复杂,并且包含一些需要以正确顺序运行的函数(如设置数据库连接等)。所以async-await提供了一种干净的方法。
当Websocket连接丢失时,我想重新建立连接。我是通过从函数本身调用函数来完成的。
这样做会导致任何问题吗? 或者我应该在递归调用中处理promise还是使用return返回它?
我做了一些搜索,但找不到明确的答案。
const WebSocket = require('ws')
const token = '1234'
const hostname = 'ws://localhost:3000'
const createSocket = async () => {
let socket = new WebSocket(hostname)
socket.onopen = () => {
socket.send(JSON.stringify({'authorize': token}), (error) => {
if (error) {
console.log(`${new Date().toUTCString()}: Socket Error while sending Auth`, error)
Promise.reject(error)
} else {
Promise.resolve(socket)
}
})
}
socket.onclose = () => {
console.log(`${new Date().toUTCString()}: Socket closed. Reopening`)
socket = null
setTimeout(createSocket, 200)
}
}
const init = async () => {
await createSocket()
}
init()