chrome storage local set not setting

时间:2015-06-21 02:34:59

标签: google-chrome

所以,我试图关注这个https://developer.chrome.com/extensions/storage#property-local文档,但是值[类别]没有被设置操作更新,任何人都知道这里发生了什么? g是一个全局对象,g [category]递增到click事件。

  //assume someNum has already been stored as a 0
  var g = {someNum:0};
  var category = "someNum";
  g[category]++;
  chrome.storage.local.set({category:g[category]}, function () {
    console.log(g[category]); // 1
    chrome.storage.local.get(category, function (value) {
      console.log(value[category]); // 0
    });
  });

3 个答案:

答案 0 :(得分:2)

chrome.storage调用是异步的。您需要将get调用放在set调用的回调函数中。

api没有任何问题,我在大多数扩展程序中使用它。

这是一个适用于开发者控制台的示例:

var randm = Math.random();
console.log("pre: " + randm);
chrome.storage.local.set({r: randm}, function(){
  chrome.storage.local.get("r", function(st){
    console.log("post: " + st.r);
    randm = 1;
    console.log("are they the same? " + (st.r == randm ? "yes" : "no"));
  });
});

您的代码也适用于我,如下所示:

chrome.storage.local.set({category:g[category]}, function () {
  console.log(g[category]); // 1
  chrome.storage.local.get("category", function (value) {
    console.log(value.category); // 1
  });
});

答案 1 :(得分:0)

那些getset函数是异步的。如果您从chrome.storage.local.get的回调中拨打set,您是否还有这个问题?

答案 2 :(得分:0)

由于类别是变量(在您的情况下为var category = "someNum"),因此您需要使用:

chrome.storage.local.set({[category]: g[category]}, function() {...

或(如果您在2016年之前使用Chrome,则

var obj={}; 
obj[category] = g[category]; 
chrome.storage.local.set(obj, function() {...