當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Node.js worker.markAsUntransferable(object)用法及代碼示例


worker.markAsUntransferable(object)

添加於:v14.5.0、v12.19.0

將對象標記為不可轉移。如果 object 出現在 port.postMessage() 調用的傳輸列表中,則將其忽略。

特別是,這對於可以被克隆而不是傳輸的對象以及被發送方的其他對象使用的對象是有意義的。例如,Node.js 標記ArrayBuffers 它用於其Buffer.allocUnsafe(size)有了這個。

此操作無法撤消。

const { MessageChannel, markAsUntransferable } = require('node:worker_threads');

const pooledBuffer = new ArrayBuffer(8);
const typedArray1 = new Uint8Array(pooledBuffer);
const typedArray2 = new Float64Array(pooledBuffer);

markAsUntransferable(pooledBuffer);

const { port1 } = new MessageChannel();
port1.postMessage(typedArray1, [ typedArray1.buffer ]);

// The following line prints the contents of typedArray1 -- it still owns
// its memory and has been cloned, not transferred. Without
// `markAsUntransferable()`, this would print an empty Uint8Array.
// typedArray2 is intact as well.
console.log(typedArray1);
console.log(typedArray2);

瀏覽器中沒有與此 API 等效的函數。

相關用法


注:本文由純淨天空篩選整理自nodejs.org大神的英文原創作品 worker.markAsUntransferable(object)。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。