5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

chrome.storage.*.getを同期的に扱う

Last updated at Posted at 2022-09-23

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()関数はそのままだと非同期処理になりPromise1を返すので、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']
                            });
}

参考文献

  1. Promise - JavaScript | MDN

  2. 本記事コメントより

5
1
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?