chrome.storage
が非同期であるため、コールバックですべてを実行する必要があります。if...else
を外部に返すことはできません。何も返されないためです(まだ)。どのChromeがクエリに応答しても、それはコールバックにキー値辞書として渡されます(あなたは1つのキーだけを要求したとしても)。
ので、
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
は値undefined
とストレージにされていない間に区別はありません。だから、そのためにテストすることができます:chrome.storage
は、この操作のためのより良いパターンを持っている、と述べた
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
}
});
。あなたはget()
にデフォルト値を提供することができます。
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
});
});
デフォルトを設定するには良い場所は、起動時になります。バックグラウンド/イベントページのchrome.runtime.onStartup
および/またはchrome.runtime.onInstalled
イベントが最適です。
出典
2016-07-08 08:15:05
Xan