PromiseWorker

PromiseWorker是一个ChromeWorker,调用而不是postMessage()发送消息,而是调用post(),它返回一个Promise

PromiseWorker模块由两个JavaScript文件PromiseWorker.jsmPromiseWorker.js组成。

eg: https://github.com/Noitidart/PromiseWorker

PromiseWorker.jsm

PromiseWorker.jsm提供BasePromiseWorker。

Path: 'resource://gre/modules/PromiseWorker.jsm'

PromiseWorker.js

PromiseWorker.js提供AbstractWorker。

Path: 'resource://gre/modules/workers/PromiseWorker.js'

worker.js

importScripts('resource://gre/modules/workers/require.js');
let PromiseWorker = require('resource://gre/modules/workers/PromiseWorker.js'); // Instantiate AbstractWorker (see below).
let worker = new PromiseWorker.AbstractWorker() worker.dispatch = function(method, args = []) {
// Dispatch a call to method `method` with args `args`
return self[method](...args);
};
worker.postMessage = function(...args) {
// Post a message to the main thread
self.postMessage(...args);
};
worker.close = function() {
// Close the worker
self.close();
};
worker.log = function(...args) {
// Log (or discard) messages (optional)
dump('Worker: ' + args.join(' ') + '\n');
}; // Connect it to message port.
self.addEventListener('message', msg => worker.handleMessage(msg));

main.js

const { utils: Cu } = Components;
const { BasePromiseWorker } = Cu.import('resource://gre/modules/PromiseWorker.jsm', {}); let myWorker = new BasePromiseWorker('path_to_worker_file.js');

post()

promise = myWorker.post(aFunctionName, [...args], aClosure, aTransferList);
//要传输ArrayBuffer对象,请将包含它的数组作为aTransferList参数传递。
myWorker.post('func', [buffer], null, [buffer]);
/*上面的代码也可以使用Meta对象完成。您要传输的每个特殊数据参数都可以包装在一个BasePromiseWorker.Meta对象中。*/
/* 传输单个值 */
myWorker.post('func', [new BasePromiseWorker.Meta(buffer, {transfers: [buffer]})]);
/* 传输多个值. transfers 指定要传输的值 */
new PromiseWorker.Meta({
theBuf: aBuf,
otherNonTrans: 'this string is not transfered but copied'},
{transfers: [aBuf]
});

reject()

受支持的错误类型

* EvalError

* InternalError

* RangeError

* ReferenceError

* SyntaxError

* TypeError

* URIError

// Worker.js
// Define a custom error prototype.
function CustomError(message) {
this.message = message;
}
CustomError.prototype.toMsg = function() {
return {
exn: 'CustomError',
message: this.message,
};
};
// A function called by message.
function func() {// Throw a custom error.
throw new CustomError('meow');
}
// Main thread

// Define a custom error prototype.
function CustomError(message) {
this.message = message;
}
CustomError.fromMsg = function(msg) {
return new CustomError(msg.message);
}; // Register a constructor.
myWorker.ExceptionHandlers['CustomError'] = CustomError.fromMsg;

resolve()

function func(buffer) {
// do something with buffer...
return 1; // 1 is sent back to main thread, as a resolved promise.
}

JS学习-PromiseWorker的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. js学习之变量、作用域和内存问题

    js学习之变量.作用域和内存问题 标签(空格分隔): javascript 变量 1.基本类型和引用类型: 基本类型值:Undefined, Null, Boolean, Number, String ...

  3. 【Knockout.js 学习体验之旅】(3)模板绑定

    本文是[Knockout.js 学习体验之旅]系列文章的第3篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  4. 【Knockout.js 学习体验之旅】(2)花式捆绑

    本文是[Knockout.js 学习体验之旅]系列文章的第2篇,所有demo均基于目前knockout.js的最新版本(3.4.0).小茄才识有限,文中若有不当之处,还望大家指出. 目录: [Knoc ...

  5. 【Knockout.js 学习体验之旅】(1)ko初体验

    前言 什么,你现在还在看knockout.js?这货都已经落后主流一千年了!赶紧去学Angular.React啊,再不赶紧的话,他们也要变out了哦.身旁的90后小伙伴,嘴里还塞着山东的狗不理大蒜包, ...

  6. js学习篇1--数组

    javascript的数组可以包含各种类型的数据. 1. 数组的长度 ,直接用 length 属性; var arr=[1,2,3]; arr.length; js中,直接给数组的length赋值是会 ...

  7. Vue.js学习笔记(2)vue-router

    vue中vue-router的使用:

  8. NODE.JS学习的常见误区及四大名著

    NODE.JS学习的常见误区及四大名著 前段时间由于不满于社区里很多人对于NODE.JS的种种误解而写了一篇文章名为: NODE.JS之我见:http://www.cnblogs.com/pugang ...

  9. Node.js学习系列总索引

    Node.js学习系列也积累了一些了,建个总索引方便相互交流学习,后面会持续更新^_^! 尽量写些和实战相关的,不讲太多大道理... Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- ...

  10. 【入门必备】最佳的 Node.js 学习教程和资料书籍

    Web 开发人员对 Node.js 的关注日益增多,更多的公司和开发者开始尝试使用 Node.js 来实现一些对实时性要求高,I/O密集型的业务.这篇文章中,我们整理了一批优秀的资源,你可以得到所有你 ...

随机推荐

  1. JS 时间的获取和比较

    JS获取时间 获取当前时间 var date = new Date(); 可指定某种格式来获取时间,或者将字符串转换成时间 var date = new Date("2019-09-24 T ...

  2. Warning: PHP Startup: Unable to load dynamic library

    使用 phpstudy时,一直提示找不到指定的模块,但是在我对应的文件里面是有该模块的 且 php.ini中 对应的语句注释也已打开 我遇见该问题解决方法是:php版本与这个拓展的版本不对应  ,把版 ...

  3. 利用Word文档的宏命令,仿信纸写文件报告

    一,首先写好稿件内容. 二,选择合适字体,然后设置信纸下划线格式. 三,启用宏命令.文件-选项-信任中心-信任中心设置-启用所有宏. 四,创建宏命令.视图-宏-创建一个宏 Sub 字体修改()'' 字 ...

  4. mysql报错This function has none of DETERMINISTIC. NO SOL or READS SOL DATA...

    是因为 存储过程/存储函数在创建时 与 开启慢查询日志冲突了 解决冲突: 临时解决:开启log_bin_trust_function_creators show variables like '%lo ...

  5. asp.net core 全局授权管理系统简介

    大家好,我最近在做一个管理系统,我希望能做出一种授权机制,通过数据库的配置,来动态管控每个登入用于的访问权限. 因为才接触core不久,了解core的授权机制还是用了些时间的. 所以总结出来,供大家分 ...

  6. [2] Bert 论文精读

    BERT是NLP领域让预训练这件事情出圈的工作. 开篇Introduction介绍了两类主流的预训练方法: 1.feature-based,即基于特征的,即我首先通过预训练得到一些比较好的特征,然后将 ...

  7. debian11 bspwm+polybar问题记录(siji字体无法正常显示)

    一.siji字体无法显示. 很懒很菜,就想用开箱即用的原始配置依然遇到了问题...plybar中的bitmap字体siji无法正常显示.即便按照github的siji官方脚本安装了siji字体还是不行 ...

  8. C# const, readonly, static readonly

    转: Const 定义的是静态常在对象初始化的时候赋值.以后不能改变它的值.属于编译时常量.不能用new初始化. Readonly 是只读变量.属于运行时变量.可以在类constructor里改变它的 ...

  9. 网络-6 IPV6(上)

    一.iPv4与ipv6对比 1.ipv4与ipv6优缺点 1.1 Ipv4与ipv6对比,ipv4中的切片使用的三个字段:identification   flags   fragment offse ...

  10. BIP弹框内容显示的隐藏

    viewModel.on("customInit", function (data) {         // 关闭或取消关原因详情--页面初始化         viewMode ...