для передачи отдельных изображений в рабочий поток. Я делаю что-то вроде следующего:
var image = ctx.getImageData(0, 0, data.width, data.height));
var tData = new Uint8ClampedArray(data.width*data.height*4);
tData.set(image.data);
let message = {function: "my function", buffer: tData.buffer}
worker.postMessage(message, [tData.buffer]);
Это прекрасно работает для отдельных изображений, но теперь я хочу отправить переменное количество изображений с помощью цикла.Отправка нескольких массивов разрешена в спецификации (например, worker.postMessage (message, [array1, array2]);), но тогда вы не можете динамически изменять количество изображений.
let imageDataArray=[];
for(let i=0;i<images.length;i++){
var tData = new Uint8ClampedArray(data.width*data.height*4);
tData.set(images[i].data);
imageDataArray.push(tData.buffer);
}
let message = {function: "my function", buffer: imageDataArray}
worker.postMessage(message, [imageDataArray]);
, но этопросто не работает правильно, так как тип данных не может быть передан.Есть ли правильный способ сделать это?
Uncaught TypeError: Failed to execute 'postMessage' on 'Worker': Value at index 0 does not have a transferable type.