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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...