2016-07-08 12 views
7

Ich mache eine Google Chrome-Erweiterung und möchte prüfen, ob ein Schlüssel in chrome.storage.sync gesetzt ist oder nicht.Wie überprüft man, ob ein Schlüssel in chrome.storage gesetzt ist?

Beispiel:
Ich möchte den Schlüssel 'links' überprüfen:

if (chrome.storage.sync.get('links',function(){ 
    // if already set it then nothing to do 
})); 
else{ 
    // if not set then set it 
} 

Jede hilfreich Vorschlag geschätzt wird.

Antwort

8

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.

Verwandte Themen