我正在使用npm ws模块(或实际上称为isomorphic-ws
的包装器)进行websocket连接。我用它从同一台PC上运行的websocket ++服务器接收一些阵列数据。然后,该数据将被处理并显示为一系列图表。现在的问题是处理本身需要很长时间。我用一条消息来计算16个图表,对于每个图表,我需要计算很多对数和其他慢速运算,以及JS中的所有运算。好吧,整个刷新操作大约需要20秒。现在我可以实际使用它了,但是问题是当我收到一个新请求时,整个消息处理程序完成后就会对其进行处理。如果同时我收到几个请求,则所有请求都将在它们进入时进行处理。因此,请求排在队列中,随着时间的流逝,当前状态越来越过时了……我想拥有一种检测是否有另一条消息等待处理的方法。如果是这种情况,我可以随时停止当前处理程序并重新开始...因此,在使用npm ws
时,是否有一种方法可以告诉您还有另一条消息正在等待处理?
谢谢
答案 0 :(得分:0)
您需要创建某种可取消的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()
我敢肯定有一些库可以满足这个确切的目的。但是我只想举一个基本的例子。