2017-03-04 154 views
0

如果我做這樣的事情在我的瀏覽器擴展程序,它工作正常:如何在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); 

...無論是保存得到看似成功,但在檢索我只是似乎有一個空的對象。我已經在Chrome開發工具中介紹了我的代碼,並檢查了返回的[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成一個函數,這樣我可以在一個鍵名和值傳遞(保存),然後稍後通過傳入正確的密鑰名稱來檢索所需的值。餅乾以這種方式工作,但本地存儲有某種我不理解的巫術。我只使用getLocalData()的回調函數,因爲我不需要setter中的回調函數。我的回調正在工作 - 回調函數被輸入,我看起來似乎是空的[對象] - 它不只是空。

請幫忙,並提前致謝。

回答

1

變量不能用作密鑰而不使用計算密鑰,在ES6中是新的。

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

使用chrome.storage:

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

另外,如果你是包裝回調函數,你應該使用promises也許還async/await

+0

有道理,丹尼爾,謝謝。雖然這似乎是一個無意義的限制,迫使尷尬的解決方法。 – HerrimanCoder

相關問題