0

我正在使用 npm ws 模块(或实际上称为包装器isomorphic-ws)进行 websocket 连接。

NPM 模块:同构-ws

我用它从运行在同一台 PC 上的 websocket++ 服务器接收一些数组数据。然后处理此数据并显示为一系列图表。

现在的问题是处理本身需要很长时间。我使用一条消息来计算 16 个图表,对于每个图表,我需要计算大量对数和其他慢操作以及 JS 中的所有这些。嗯,整个刷新操作大约需要 20 秒。

现在我实际上可以忍受这一点,但问题是当我收到一个新请求时,它会在整个消息处理程序完成后处理。如果我同时收到几个请求,所有的请求都会在它们进来时被处理。所以请求在那里排队,随着时间的推移,当前状态变得越来越过时......

我想有一种方法来检测是否有另一条消息等待处理。如果是这种情况,我可以随时停止当前处理程序并重新开始......所以在使用时npm ws,有没有办法告诉有另一条消息等待处理?

谢谢

4

1 回答 1

1

您需要创建某种可取消的job包装器。没有看到你的代码很难给出具体的建议。但它可能是这样的。

const processArray = array => {
  let canceled = false;

  const promise = new Promise((resolve, reject) => {
    // do something with the array
    for(let i = 0; i < array.length; i++) {
      // check on each iteration if the job has been canceled
      if(canceled) return reject({ reason: 'canceled' });
      doSomething(array[i])
    }
    resolve(result)
  })

  return {
    cancel: () => {
      cancel = true
    },
    promise
  }
}

const job = processArray([1, 2, 3, ...1000000]) // huge array

// handle the success
job.promise.then(result => console.log(result))

// Cancel the job
job.cancel()

我确信有图书馆可以服务于这个确切的目的。但我只是想举一个基本的例子来说明如何做到这一点。

于 2019-11-05T15:55:33.357 回答