我目前正在做一个项目,涉及 nativescript-vue和typescript 而我必须与 工人 (我对NS和工人不太熟悉)。我阅读了文档,并尝试了NS文档中给出的实现方法,并将其调整到项目中,但我似乎无法使其正确......。的确,一开始是可以工作的,但是在调用了几次实例化和管理worker的方法后,app 崩溃而不出错... 我不知道是由于worker在完成任务后没有真正关闭,还是脚本本身有问题......
这是main.ts的部分代码。
import "tns-core-modules/globals"
export class Main extends Vue {
worker: Worker
onTaskReceived(task){
this.manageWorker(task, this.worker)
}
manageWorker(task: any, worker: Worker){
const NewWorker = require('nativescript-worker-loader!./worker.ts')
worker = new Worker()
worker.postMessage({
type: "task",
value: task
})
worker.onerror = await function (err) {
console.log(`An unhandled error occurred in worker: ${err.filename}, line: ${err.lineno} :`);
console.log(err.message);
worker.terminate()
}
worker.onmessage = function (message) {
console.log('{onmessage}')
worker.terminate()
}
}
}
这是其中一个worker(worker.ts)的代码。
import "tns-core-modules/globals"
import { error } from "tns-core-modules/trace";
const context: Worker = self as any;
context.onmessage = function(task) {
const request = task.data
console.log('[WORKER]: data from main received')
console.log(request)
# Here is the code that the worker execute when triggered
if (result.state === 'done') {
console.log('[WORKER]: work done - sending data back')
context.postMessage({
type: 'result',
succeed: true,
value: result
})
}
}
context.onerror = function (error) {
console.log('[WORKER]{ERROR} '+error)
}
export default {} as typeof Worker & (new () => Worker)
提前感谢您的帮助:)
我在你的源码中看到一些错误。
NewWorker
,但随后实例化 Worker
..ts
分机。postMessage
赋值前 onmessage
.在 worker.ts
:
import 'globals';
const context: Worker = self as any;
context.onmessage = (msg: MessageEvent): any => {
(global as any).postMessage({output: `rx: ${msg.message}`});
};
在其他任何地方。
import * as MyWorker from 'nativescript-worker-loader!./worker';
const worker: MyWorker = new MyWorker();
worker.onmessage((m: MessageEvent) => { console.log(`(out) ${m.output}`) });
worker.postMessage({ message: 'Hello, world!' });
// later: worker.terminate();