使用我最新的Firefox Webextension要求我调用异步API函数(browser.storage.local.get())。
但是,这意味着API调用的结果不容易从getter获得。并非没有使用" await"反正在异步函数中的关键字。
有没有办法抽象出来,所以可以从任何函数中定期使用getter?
这是(相当早)的代码库。
class CookieButton {
async getStorageAsync() {
var storage = await browser.storage.local.get();
return storage
}
get ButtonState() {
console.log("GET")
return this.getStorageAsync().then(x => x.buttonState)
}
set ButtonState(value) {
console.log("SET")
return browser.storage.local.set({ buttonState: value })
}
constructor(ButtonState) {
this.setup()
}
async enable() {
browser.privacy.websites.cookieConfig.set({ value: { behavior: "allow_all" } })
this.ButtonState = 'turn-off';
browser.browserAction.setIcon({ path: 'icons/enabled.png', });
}
async disable() {
browser.privacy.websites.cookieConfig.set({ value: { behavior: "reject_all" } })
this.ButtonState = 'turn-on';
browser.browserAction.setIcon({ path: 'icons/disabled.png', });
}
async setup() {
if (await this.ButtonState == undefined) {
this.ButtonState = "turn-off";
}
if (await this.ButtonState == "turn-on") {
browser.browserAction.setIcon({ path: 'icons/disabled.png', });
}
browser.browserAction.onClicked.addListener(async function (tab) {
var state = await cookieButton.ButtonState;
switch (state) {
case 'turn-on':
cookieButton.enable();
break;
case 'turn-off':
cookieButton.disable();
break;
case 'undefined':
cookieButton.enable();
break;
}
});
}
}
var cookieButton = new CookieButton();
有问题的部分是内部的阻止"获取ButtonState()"。
假设我想记录Button的当前状态,因为它已保存在存储对象中。
就目前而言,我必须使用" console.log(等待this.ButtonState)",它只能在异步函数中使用。理想情况下,我能够键入" console.log(this.ButtonState)"并从任何地方访问结果。