如何在Chrome本地存储中使用动态密钥获取和设置?

时间:2017-03-04 23:24:34

标签: javascript google-chrome google-chrome-extension

如果我在Chrome扩展程序中执行此类操作,则可以正常使用:

chrome.storage.local.set({"Foo1": dataValue});

这很好:

chrome.storage.local.get("Foo1", callback);

但是当我尝试抽象这些信息函数时,我可以在不同情况下使用不同的键名:

function saveLocalData(dataKey, dataValue){
    chrome.storage.local.set({dataKey: dataValue});
}
saveLocalData("Foo1", "hello foo");

...然后这个:

function getLocalData(dataKey, callback){
    chrome.storage.local.get(dataKey, callback);
}
getLocalData(dataKey, myCallbackFunction);

... save get 似乎都很成功,但在检索时我似乎只有一个空对象。我已经逐步完成了我的chrome dev工具中的代码并检查了返回的[Object] - 它不是null - 但它似乎是空的无用的,如果它的数据在我的内部某处,我似乎无法找到它。

我甚至试过这个,但没有更好的结果:

function getLocalData(dataKey, callback){
    dataKey = "\"" + dataKey + "\"";
    chrome.storage.local.get(dataKey, callback);
}

function saveLocalData(dataKey, dataValue){
    dataKey = "\"" + dataKey + "\"";
    chrome.storage.local.set({dataKey: dataValue});
}

必须有一些方法可以将本地存储getter和setter抽象为一个函数,这样我就可以传入一个键名和一个值(保存),然后通过传入正确的键名来检索所需的值。 Cookie以这种方式工作,但本地存储有一些我不理解的巫术。我只使用getLocalData()的回调函数,因为我不需要在setter中进行回调。我的回调正在运行 - 输入了回调函数,我看起来似乎是空的 [对象] - 它不仅仅是null。

请提供帮助,并提前致谢。

1 个答案:

答案 0 :(得分:2)

如果不使用计算键,则不能将变量用作键,ES6中的新键。

console.log({ [ "key" + 1 ]: "value" + 1 })

使用chrome.storage:

chrome.storage.local.set({ [ "key" + 1 ]: "value" + 1 })

此外,如果要包装回调函数,则应使用promises,也可以使用async/await