0

First Post, so forgive me for any general practices that I haven't followed.

Also very new to Chrome extension and Javascript so apologies for my noob question

I have the following code but getting the console is say undefined

    function getFromStorage(key) {
    chrome.storage.sync.get(key, function (r) {
        const returnVal = r[key]
        console.log(returnVal)
        return returnVal
    })
}

chrome.contextMenus.onClicked.addListener((selectionText) => {
    var Val = getFromStorage("value")
    console.log(Val)
});

But when I run the chrome.storage.sync.get in the listener, it works fine. I have a few values from storage that I want to grab so thought a function would be better.

btw, using Manifest V3

Thank you in advance

1 Answers1

0

The problem is that your getFromStorage doesn't return anything. It just calls an asynchronous API, then the callback runs and returns a value into the internals of the chrome API, which simply ignores this value.

Since chrome.storage returns a Promise in modern Chrome you can just await it directly.
Note that the function should be declared as async to allow using await inside.

async function getFromStorage(key) {
  return (await chrome.storage.sync.get(key))[key];
}

chrome.contextMenus.onClicked.addListener(async info => {
  let Val = await getFromStorage('value');
  console.log(Val);
});
wOxxOm
  • 65,848
  • 11
  • 132
  • 136
  • Done this and now got another error. Uncaught SyntaxError: await is only valid in async functions and the top level bodies of modules Full Code chrome.runtime.onInstalled.addListener(function () { chrome.contextMenus.create({ id: 'test', title: 'test', contexts: ['all'] }); }); async function getFromStorage(key) { return (await chrome.storage.sync.get(key))[key]; } chrome.contextMenus.onClicked.addListener(() => { let Val = await getFromStorage('daysValue'); console.log(Val); }); Running as a Service Worker in Manifest V3 – Danish Din Jan 17 '22 at 18:32
  • Please read the note about `async` in the answer and add it to your listener as shown in the answer. – wOxxOm Jan 17 '22 at 19:23