2016-07-08 15 views

答えて

8

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イベントが最適です。

関連する問題