TL;DR
// async キーワードで同期処理のできる関数を定義
window.onload = async (e) => {
// chrome.storage.sync.get() に await をつけて同期処理に
// (await chrome.storage.sync.get()) は Promise の処理結果を返すので、戻り値は ['要素名'] で取得できる
const domainList = (await chrome.storage.sync.get('domainList'))['domainList'];
console.log(domainList);
}
この書き方がnew Promise()
が不要なので簡単だと思います。
ポイント
その1
chrome.storage.sync.get()
関数はそのままだと非同期処理になりPromise
1を返すので、asyc
をかけた関数でラップして同期処理を可能にしたうえで(await chrome.storage.sync.get('domainList'))
を使ってstorage
内の値が帰ってくるまで待つようにしています。
今回はHTMLの描画後にjavascriptが動いてほしかったので、window.onload
イベント用の無名関数にasync
をかけました。
その2
(await chrome.storage.sync.get('domainList'))['domainList']
はget('domainList')
と同じキー'domainList'
を使ってsync
に保存されているオブジェクトから取得する値を指定しています2。
また、(await 〜.get())
をカッコで括ることにより、get()
のPromise
処理後の戻り値が取得でき、.then()
を呼ぶ必要もなくなります。
例
window.onload = async (e) => {
// domainList1 と domainList2 と domainList3 は同じ値になる
const domainList1 = (await chrome.storage.sync.get('domainList'))['domainList'];
const domainList2 = await chrome.storage.sync.get('domainList').then(item => item['domainList']);
const domainList3 = await chrome.storage.sync.get('domainList')
.then(item => {
return item['domainList']
});
}