在js上侦听消息时,承诺不使用WebSocket

5t7ly7z5  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(117)

在 收到 来自 websocket 服务 器 的 消息 时 , 我 想 调用 一 个 promise 函数 , 并 等待 一 个 响应 来 决定 是否 需要 威胁 另 一 个 消息 。
我 尝试 将 一 个 connection.on('message', cb) Package 成 一 个 Promise , 但 也 没有 用 。 代码 如下 :

let alreadyBought = false

const client = new WebSocketClient()
client.connect('wss://...')
client.on('connect', async (connection) => {
  connection.on('message', async event => {
    if (event.type === 'utf8') {
      const data = JSON.parse(event.utf8Data)
      if (!alreadyBought) {
        await trigger(data.p) // <--- not working
      }
    }
  })
})

async function trigger(price) {
  const order = await exchange.createLimitBuyOrder(config.currency, amount, price)
  console.log(order)
  alreadyBought = true
}

中 的 每 一 个
如果 我 执行 console.log(event) , 我 会 得到 这个 , 检查 时间 戳 :

{
  d: '{"t":1924698,"p":"1541.86", "T":1662043735929}'
}
{
  d: '{"t":1924699,"p":"1541.86","T":1662043735955}' // <-- At the same timestamp
}
{
  d: '{"t":1924700,"p":"1541.21","T":1662043735955}' // <-- At the same timestamp
}
{
  d: '{"t":1924701,"p":"1540.91","T":1662043735955}' // <-- At the same timestamp
}

格式

y1aodyip

y1aodyip1#

好的,我终于找到了一个解决方案,通过使用价格锁,而承诺是处理。

let pricelock = false

const client = new WebSocketClient()
client.connect('wss://...')
client.on('connect', async (connection) => {
  connection.on('message', async event => {
    if (event.type === 'utf8') {
      const data = JSON.parse(event.utf8Data)

      if (!pricelock) {
        pricelock = true

        await trigger(data.p).then(() => {
          pricelock = false
        })
      }
    }
  })
})

async function trigger(price) {
  await exchange.createLimitBuyOrder(config.currency, amount, price)
}

我会留一个职位,以备有更好的解决方案。

相关问题