我最近正在使用Web Workers和Buffers。
现在我有一个缓冲区,我想使用SmartBuffer检查第六个字节。如果该字节为0,则发送给worker1。否则,发送给worker2。
const buffer = SmartBuffer.fromBuffer(someBuffer);
if(buffer.toBuffer()[5] === 0){
worker1.postMessage(someBuffer, [someBuffer]);
}
if(buffer.toBuffer()[5] === 1){
worker2.postMessage(someBuffer, [someBuffer]);
}
由于我使用的是可转让对象,因此如果someBuffer
已转让,我将无法在第5行中访问它。 (这会导致错误:Cannot perform Construct on a detached ArrayBuffer
。)
我知道这是一个不好的例子,我可以简单地使用else if
来防止此错误。但是问题是:有什么方法可以知道是否已传输缓冲区吗?
答案 0 :(得分:1)
分离的ArrayBuffer的byteLength
属性和使用此ArrayBuffer的每个类型化的数组将为零。
我不确定SmartBuffer库的内部结构,但是此检查应该可以进行:
someBuffer.byteLength === 0
如果您要检查初始byteLength为零的ArrayBuffer,这当然没有帮助。在这种情况下,如果脱离,则不会发生任何变化。但是我认为这只是理论上的问题。