gpt4 book ai didi

javascript - Web Worker 获取数据

转载 作者:行者123 更新时间:2023-12-01 02:07:58 28 4
gpt4 key购买 nike

我有如下的网络 worker :

class FetchWorker {
constructor(id) {
this.id = id;
this.ids = [];
this.timer = 1;
}

start() {
this.fetchData();
}

addIds(ids) {
this.ids.push(...ids);
}

sendData(method, data){
self.postMessage(JSON.stringify({
method,
data
}))
}

fetchData() {
this.timer *= 2;
console.log(this.id,') ### this', this);
console.log(this.id,') ### ids', this.ids);
console.log(this.id,') ### FetchData', this.ids.length, this.timer);
console.log(this.id,') ######');

if(!this.ids.length) {
setTimeout(this.fetchData, this.timer);
return;
}

console.log(this.id, ')FETCHED ...');

this.sendData('webworker:fetchedAds', this.ids);
this.sendData('webworker:timer', this.timer);

setTimeout(this.fetchData, this.timer);
}
}

const id = Number.parseInt((Math.random() * 100) + '');

console.log('self', self);

const worker = new FetchWorker(id);

self.addEventListener('message', (event) => {
const message = JSON.parse(event.data);
const {method, data} = message;

if (method === 'webworker:addids') {
worker.addIds(data);
}

if (method === 'webworker:startFetching'){
worker.start();
}
});

我正在创建这个工作人员,并向他发送带有 ids 和启动命令的消息,但是当我尝试将 ids 数组的长度写入控制台时,我在 fetchData 方法中收到错误,错误是无法读取未定义的属性长度

我检查了它,并且在我的 fetchData 方法中指向 DedicatedWorkerGlobalScope 而不是 FetchWorker 类,这对我来说有点困惑,因为我不知道为什么类方法中不存在这个

最佳答案

我通过将其绑定(bind)到 setTimeouts 中的 fetchData 解决了我的问题,它看起来像:

setTimeout(this.fetchData.bind(this), this.timer * 1000);

我不知道为什么我必须这样做

关于javascript - Web Worker 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49945866/

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