Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference (7 answers)
Closed 5 years ago .

I'm trying to use chrome.storage.local in my extension, and it doesn't seem to work. I used localStorage but realized that I can't use it in content scripts over multiple pages.

So, this is what I've come up with:

function save()
    var channels = $("#channels").val();
    var keywords = $("#keywords").val();
    chrome.storage.local.set({'channels': channels});
    chrome.storage.local.set({'keywords': keywords});

I do believe I'm doing the save() right, but the problem comes up in load():

function load()
    var channels = "";
    chrome.storage.local.get('channels', function(result){
        channels = result;
        alert(result);
    var keywords = "";
    chrome.storage.local.get('keywords', function(result){
        keywords = result;
        alert(result);
    $("#channels").val(channels);
    $("#keywords").val(keywords);

When the alerts trigger, it prints out [object Object]. Why is that? What am I doing wrong? I looked at the documentation/examples, but I can't seem to pinpoint the problem.

var channels = ""; var keywords = ""; chrome.storage.local.get('channels', function (result) { channels = result.channels; alert(result.channels); $("#channels").val(channels);

Chrome.storage.local.get() returns an object with items in their key-value mappings, so you have to use the index of the key in your search pattern.

Thanks to Rob for identifying: Chrome.storage.local.get() is asynchronous, you should modify your code to ensure they work after callback() is successful.

Let me know if you need more information.

Better to declare variables in callback function instead of declaring them globally. Just saying :) – Mr. Alien Jun 8, 2016 at 16:38

The "result" value you are using is an object that contains the storage value, to get the value you have to use result.keywords, which will get the value of the keywords. EX:

function load(){
  chrome.storage.local.get('keywords', function(result){
    var keywords = result.keywords;
    alert(keywords);
  chrome.storage.local.get('channels', function(result){
    var channels = result.channels;
    alert(channels);
                Doesn't deal with the main problem of using keywords later in the code, but before the callback runs.
– Xan
                Oct 10, 2016 at 16:50