gpt4 book ai didi

scope - 在 Promise 中丢失范围

转载 作者:行者123 更新时间:2023-12-03 07:32:52 24 4
gpt4 key购买 nike

<分区>

我的类(class)设计和 promise 有一些问题。我试图通过递归调用我的 promise cb 来监听变化变量。当 networkResponse 返回一个有效(非空) token 时,我正在尝试解析它,否则它将通过在每次调用中延迟 500 毫秒来检查 500 次。

这是我现在简化的类(class):

class Tokenizer {
constructor(page) {
this.page = page;
this.token = null;
this.tries = 500;
this.page.on('response', this.onNetworkResponse.bind(this));
}
async onNetworkResponse(response) {
if (condition) {
let resp = await response.text();
let regex = /access_token=([\w\d]+)/g;
let _token = regex.exec(response);
this.token = _token[1];
}
}

getToken() {
return new Promise(function cb(resolve, reject) {
console.log(this.tries + ' remaining');
if (--this.tries > 0 && !this.token) setTimeout(() => cb(resolve, reject), 500);
else (this.tries <= 0) ? reject('Try') : resolve(this.token);
});
}
}

我这样称呼 promise :

const t = new Tokenizer();

let test = async () => {
let token = await t.getToken();
}

test();

但是我在 cb 函数中丢失了这个范围。如果有人能回答这个问题,我将不胜感激

对于有这样问题的人,我刚刚像这样更新了我的 getToken 函数:

  getToken() {
var cb = (resolve, reject) => {
console.log(this.tries);
if (--this.tries > 0 && !this.token) setTimeout(() => cb(resolve, reject), 500);
else (this.tries <= 0) ? reject('Try') : resolve(this.token);
}
return new Promise(cb);
}

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