我写了一个javascript类,实例化后创建了一个Web worker。此类中的另一个方法运行worker。我想调用运行工作程序的方法,然后异步地执行某些操作。为了更好地理解,我在下面添加了原理图代码框架。
我试图在一个类变量中生成并存储一个Promise,然后对其执行操作,但这似乎是错误的ansatz。链接到JS Bin。
class Task{
constructor(){
this.data = 0;
//this.listen; //my idea, does not work
this.worker = new Worker('worker.js');
this.worker.onmessage = (function(e){
// worker constantly emits messages
let data = e.data.split(' ');
// suppose message is now availabe as array
this.data = data;
if(data.includes("trigger")){
//trigger signals that the heavy computation is over
/* my idea didn't work:
*this.listen = Promise.resolve(1);
*/
}
}).bind(this);
}
async doTask(){
this.worker.postMessage("start computation");
//wait for the worker to finish calculation
/*my idea
*await this.listen;
*/
//do something after trigger was sent
return 0;
}
}
也许像这样?
class Task{
constructor(){
this.data = 0;
this.worker = new Worker('worker.js');
}
async calculation() {
if (this.worker.onmessage === null) {
return new Promise(resolve => {
this.worker.onmessage = e => {
let data = e.data.split(' ');
// suppose message is now availabe as array
this.data = data;
if(data.includes("trigger")){
this.worker.onmessage = null;
resolve();
}
};
this.worker.postMessage("start computation");
});
} else {
console.log('One calc at a time please...');
}
}
async doTask(){
await this.calculation();
//do something after trigger was sent
return 0;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句