Можно ли передать объект, просокий, прокси-прокси-функцию?Javascript

Форум по Javascript
Ответить
Anonymous
 Можно ли передать объект, просокий, прокси-прокси-функцию?

Сообщение Anonymous »

Этот вопрос относится к библиотеке веб -работников Comlink и, в частности, с использованием comlink.proxy . Рассмотрим следующую ситуацию: < /p>
// worker.ts

import * as Comlink from 'comlink';

export class Foo { ... }

export class Bar {
makeFoo () {
return Comlink.proxy(new Foo);
}
useFoo (foo: Foo) { ... }
}

Comlink.expose(Bar);
< /code>
// main.ts

import type { Foo, Bar } from './worker.ts');
import * as Comlink from 'comlink';

const worker = new Worker('./worker.ts');
const bar: Comlink.Remote = await new Comlink.wrap(worker);
const foo: Comlink.Remote = await bar.makeFoo();

await bar.useFoo(foo);

До последней строки все работает, как и ожидалось: foo и bar в основном потоке - прокси для foo и bar Случай, которые живут на работнике, соответственно. Последняя строка (await bar.useFoo(foo)) - это то, где возникают проблемы; Намерение состоит в том, чтобы прокси-сервер автоматически развернулся и получит экземпляр незаистекания обратно на сторону работника, но с учетом этого вместо этого приводит к ошибке (приводит к ошибке (ошибка (приводит к ошибке (obj is undefined).
Есть ли способ достичь этого в пределах того, что предлагает Comlink? Прокси -foo к основному потоку вообще и вместо этого полагается на уровень косвенности, назначая и возвращая уникальные идентификаторы/ручки для отдельных экземпляров foo , созданных через Makefoo и передавая их в Usefoo . Основным недостатком такого подхода является очевидное увеличение сложности, особенно по мере того, как растет публичный API Foo :
// with a proxy:
await foo.method1(arg1, arg2);
await foo.method2(arg1);
// with a handle:
await bar.fooMethod1(fooHandle, arg1, arg2);
await bar.fooMethod2(fooHandle, arg1);


Подробнее здесь: https://stackoverflow.com/questions/794 ... d-function
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»