Пост-сообщение с использованием Sharedworker

С данным tsconfig.json,

{

    "compilerOptions": {

      "lib": ["es2015", "dom"]
    },
    "files": [
      "./1_webworker/tstut.ts",
      "./1_webworker/worker.ts"

    ]
  }

и структура папок


Запускал npm install --save @types/sharedworker.

В приведенном ниже коде (из ./1_webworker/tstut.ts),

let worker: Worker = new Worker('worker.js');

для использования синтаксиса совместной работы, объявленного:

let worker: SharedWorker.SharedWorker = new SharedWorker('worker.js');

но ниже ошибка.

worker.postMessage('do some work'); // Property 'postMessage' does not exist on type 'SharedWorker'

worker.addEventListener('message', (e) => {

  console.info(e.data); // Property 'data' does not exist on type 'Event'
});

Как отправить строку сообщения общему работнику?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 164
1

Ответы 1

Вот рабочий пример SharedWorker на TypeScript.

caller.ts

let worker = new SharedWorker('worker.js');
worker.port.start();

worker.port.onmessage = function (e) {
    console.info('Caller Received:', e.data);
}

worker.port.postMessage('Message');

worker.ts

interface SharedWorkerGlobalScope {
    onconnect: (event: MessageEvent) => void;
}

const _self: SharedWorkerGlobalScope = self as any;

_self.onconnect = function (e) {
    var port = e.ports[0];

    port.addEventListener('message', function (e) {
        console.info('Worker Received', e.data);
        port.postMessage('Result');
    });

    port.start(); // Required when using addEventListener. Otherwise called implicitly by onmessage setter.
}

SharedWorkerGlobalScope в настоящее время является частью определения типа, которое вы извлекли из npm. Я отправлю запрос на перенос, чтобы обновить его в ближайшее время.

ES6 имеет postMessage() для совместно используемого сотрудника. Запрос отредактирован
overexchange 01.06.2018 12:54

Я вижу postMessage в этом отвечать. Наверное, неправильно использую, не используя порт. Не уверен, насчет порта.

overexchange 01.06.2018 13:13

См. Обновленный ответ и пул реквест: github.com/DefinitiTyped/DefinitiTyped/pull/26202

Fenton 01.06.2018 15:10

Мягкий вопрос: Сэр, Могу ли я postMessage() общего работника в междоменном режиме? С выделенным веб-работником я могу

overexchange 01.06.2018 20:45

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