JS中如何判断一个ArrayBuffer是否分离或转移?

How to check if an ArrayBuffer is detached or transfered in JS?

我最近在使用 Web Worker 和 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 来防止这个错误。但是问题是:有什么方法可以知道一个buffer是否已经被传输了?

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

我不确定 SmartBuffer 库的内部结构,但这个检查应该有效:

someBuffer.byteLength === 0

如果您想检查初始 byteLength 为零的 ArrayBuffer,这当然没有帮助。在这种情况下,如果它被分离,什么都不会改变。不过我觉得这只是理论上的问题