可以递归调用异步等待函数来堆栈或内存问题吗?

时间:2017-10-31 05:19:04

标签: javascript websocket async-await

我刚刚开始使用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()

0 个答案:

没有答案