Zunächst einmal, da chrome.storage
asynchron ist, muss alles im Callback durchgeführt werden - Sie können nicht if...else
draußen, weil nichts zurückgegeben wird (noch). Unabhängig davon, welche Antwort Chrome auf die Anfrage gibt, wird sie an den Rückruf als Schlüsselwert-Wörterbuch weitergeleitet (selbst wenn Sie nur nach einem Schlüssel gefragt haben).
So
chrome.storage.sync.get('links', function(data) {
if (/* condition */) {
// if already set it then nothing to do
} else {
// if not set then set it
}
// You will know here which branch was taken
});
// You will not know here which branch will be taken - it did not happen yet
Es gibt keinen Unterschied zwischen dem Wert undefined
und nicht bei der Lagerung zu sein. So können Sie für diesen Test:
chrome.storage.sync.get('links', function(data) {
if (typeof data.links === 'undefined') {
// if already set it then nothing to do
} else {
// if not set then set it
}
});
Das heißt, chrome.storage
hat ein besseres Muster für diesen Vorgang. Sie können einen Standardwert get()
bieten:
var defaultValue = "In case it's not set yet";
chrome.storage.sync.get({links: defaultValue}, function(data) {
// data.links will be either the stored value, or defaultValue if nothing is set
chrome.storage.sync.set({links: data.links}, function() {
// The value is now stored, so you don't have to do this again
});
});
Ein guter Standardwerte beim Start sein würde; chrome.runtime.onStartup
und/oder chrome.runtime.onInstalled
Ereignisse in einer Hintergrund-/Ereignisseite passen am besten.