I have a code like below in my MV3 extension:
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(...);
});
With classic Manifest V2 extension I could be sure that value of lastPick will be always persisted through listener calls (which in turn caused by multiple update calls), so "some stuff" logic within listener won't be broken.
But what about Manifest V3, or to be more precise, its service workers? Can I be confident the above logic won't be broken there?