nodejs - DataCloneError: function () { [native code] } не может быть клонирован

Я пытаюсь порождать потоки (используя новый модуль Nodejs 'worker_threads') и передавать каждому из них сложный объект, который является объектом 'page' экземпляра browser.newPage() Puppeteer. Я попробовал оба с использованием workerData и MessageChannels - что, из документов:

port.postMessage: отправляет значение JavaScript получающей стороне этого канала. значение будет передано способом, совместимым с алгоритмом структурированного клона HTML. В частности, он может содержать циклические ссылки и объекты, такие как типизированные массивы, которые JSON API не может преобразовать в строку.

но я всегда получаю ошибку:

(узел:7133) UnhandledPromiseRejectionWarning: DataCloneError: function () { [собственный код] } не может быть клонирован. в Worker.postMessage (internal/worker.js:378:23)

Я также пытался его упорядочить и проанализировать, но объект страницы также содержит функции, которые я не смог оценить из контекста потоков (я также хотел бы избежать использования eval()).

Вопрос в том, как передать сложный объект, такой как Puppeteer browser.newPage(), в потоки, порожденные worker_threads в Nodejs?

0 ответов

dethSwathch прав насчет этого: вы не можете. Передача сообщений разрешена только для некоторых собственных типов данных, включая Object (и Date и, конечно, TypedArrays). Вот почему вы теряете все типы информации и функций. Однако вы, безусловно, можете использовать "голый" объект, чтобы просто заполнить новый экземпляр страницы (или любой другой пользовательский объект).

Эта DataCloneError, кажется, является ограничением прошлого. По крайней мере, я не мог воспроизвести это. Объект должен быть скопирован автоматически без какой-либо сериализации.

Поверьте, ответ в основном "Нет".

Можете ли вы изменить то, что вы проходите так, что вы можете "восстановить" это на другой стороне?

Эта модель похожа на разговор с другим сервером - вам нужно закодировать все, что вам нужно, а затем преобразовать его на другой стороне.

Другие вопросы по тегам