如何检查ArrayBuffer是否在JS中分离或传输?

时间:2018-08-15 09:21:38

标签: javascript buffer web-worker arraybuffer

我最近正在使用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来防止此错误。但是问题是:有什么方法可以知道是否已传输缓冲区吗?

1 个答案:

答案 0 :(得分:1)

分离的ArrayBuffer的byteLength属性和使用此ArrayBuffer的每个类型化的数组将为零。

我不确定SmartBuffer库的内部结构,但是此检查应该可以进行:

someBuffer.byteLength === 0

如果您要检查初始byteLength为零的ArrayBuffer,这当然没有帮助。在这种情况下,如果脱离,则不会发生任何变化。但是我认为这只是理论上的问题。