Typescript 如何正确管理nativescript中的工作人员?
我目前正在从事一个项目,涉及nativescript vue和typescript,我必须与工作者一起工作(我对NS和工作者不太熟悉)。我已经阅读了文档,尝试了NS文档中给出的实现,并将其调整到项目中,但我似乎无法正确地实现它。。。确实,它一开始可以工作,但在调用了几次实例化和管理worker的方法之后,应用程序崩溃,没有出现错误。。。我不知道这是因为工作人员在完成任务后没有真正关闭,还是脚本本身有问题 这是main.ts代码的一部分Typescript 如何正确管理nativescript中的工作人员?,typescript,nativescript,web-worker,nativescript-vue,Typescript,Nativescript,Web Worker,Nativescript Vue,我目前正在从事一个项目,涉及nativescript vue和typescript,我必须与工作者一起工作(我对NS和工作者不太熟悉)。我已经阅读了文档,尝试了NS文档中给出的实现,并将其调整到项目中,但我似乎无法正确地实现它。。。确实,它一开始可以工作,但在调用了几次实例化和管理worker的方法之后,应用程序崩溃,没有出现错误。。。我不知道这是因为工作人员在完成任务后没有真正关闭,还是脚本本身有问题 这是main.ts代码的一部分 import "tns-core-modules/globa
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)的代码
提前感谢您的帮助:)我发现您的源代码中有一些错误
NewWorker
,但随后实例化Worker
.ts
扩展名导入onmessage
之前调用postMessage
worker.ts中
:
导入“globals”;
const context:Worker=self,如有;
context.onmessage=(msg:MessageEvent):any=>{
postMessage({output:`rx:${msg.message}}}});
};
在其他任何地方:
从“nativescript worker loader!”以MyWorker的身份导入*/工人;;
const-worker:MyWorker=new-MyWorker();
worker.onmessage((m:MessageEvent)=>{console.log(`(out)${m.output}`)});
worker.postMessage({message:'Hello,world!'});
//later:worker.terminate();
此外,一旦完成工作,您应该从内部关闭或终止该工作人员。3根本不是问题。onmessage侦听工作线程的postMessage,它将在很长时间后触发。Aldo,即使是同一个MessageChannel,消息事件总是异步触发的,因此您可以在postMessage之后同步添加onmessage,它会工作的。非常感谢您回复@Ian,dashman和Kaido:)通过您的反馈纠正了这个问题!您可能希望按照Ian的说明进行操作,除了尝试使用Android Studio的日志监视器(它可能会为您提供有关崩溃的更多详细信息)之外,还可以共享日志和正确的代码来重现问题。
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)