gpt4 book ai didi

javascript - 停止后如何重新启动网络 worker

转载 作者:行者123 更新时间:2023-11-30 09:23:19 25 4
gpt4 key购买 nike

我在我的应用程序中使用网络 worker 。在某个时候我想停止我的网络 worker 并重新启动它。停止 web worker 工作正常,然后我向 web worker 发布了一些消息,除非我重新加载页面,否则它不会响应。所以我想知道如何在停止后重新启动网络 worker 而不重新加载页面。

主要.js

var ww = new Worker("worker.js");

function mainFunction(){
//some code to form data
f1(data,function(res){
return res;
};

function f1(data,callback){
ww.postMessage({'action':'action1'});
ww.onmessage = function(event){
var response = event.data;
callback(response);
}

function f2(){
ww.postMessage({'action':'stopWW'});
ww.postMessage({'action':'reStartWW'});
ww.onmessage = function(event){
mainFunction();
}
}

在 worker.js 中

self.addEventListener('message',function(e){
var functionName=e.data.action;

switch(functionName){
case 'stopWW':
self.close();
break;
case 'reStartWW':
var test = {'key':1}
self.postMessage(test);
break;
case 'action1':
//do something
self.postMessage(somedata);
break;
}
});

最佳答案

一旦 close()terminate() 被调用,您的 worker 就被有效地关闭并且应该是不可访问的。您可以通过再次调用 ww = new Worker("worker.js"); 创建一个新的 worker,但是第一个 worker 的内部状态将不再可用。

现在,如果您想要的是实质上暂停 worker,但让它以其内部状态准备好重新启动,我建议您简单地切换监听器。像这样:

function whenActive(event){
var functionName=e.data.action;

switch(functionName){
case 'stopWW':
self.removeEventListener("message", whenActive);
self.addEventListener("message", whenNotActive);
//do other stopping actions
break;
[...]//your other cases, but not "restartWW"
}
}
function whenNotActive(event){
var functionName=e.data.action;

if(functionName === 'reStartWW'){
self.addEventListener("message", whenActive);
self.removeEventListener("message", whenNotActive);

[...]//do other re-startup actions
}
}

//start the cycle
self.addEventListener("message", whenActive);

关于javascript - 停止后如何重新启动网络 worker ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50350316/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com