如何解决Manifest V3 Service Worker 中的异步代码是否在与其启动位置相同的执行上下文中解析/完成?
我的 MV3 扩展中有如下代码:
import _ from 'lodash';
const storageKey = 'state';
let state;
(async () => {
state = await chrome.storage.local.get(storageKey);
listener();
})();
const update = async (data) => {
await chrome.storage.local.set({[storageKey]: data});
}
let lastPick;
const listener = async () => {
const pick = _.pick(state,...);
if (_.isEqual(pick,lastPick))
return;
lastPick = pick;
...
// do some stuff
}
chrome.storage.onChanged.addListener((changes,area) => {
if (area !== 'local' || !(storageKey in changes))
return;
const {newValue} = changes[storageKey];
state = newValue;
listener();
});
chrome.tabs.onActivated.addListener(async (data) => {
...
update(...);
...
update(...);
...
update(...);
});
使用经典的 Manifest V2 扩展,我可以确定 lastPick
的值将始终通过 listener
调用(这又由多个 update
调用引起)保持不变,因此“某些东西" listener
内的逻辑不会被破坏。
但是 Manifest V3,或者更准确地说,它的 Service Worker 呢?我可以确信上面的逻辑不会在那里被打破吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。