Firefox WebExtentionを使ってアドオンを開発しました。 storage.local.get()
がasyn関数なので、実行順序が予期したとおりではないことが分かりますが、私の質問はawait
または他のメソッドを使用して実行順序を修正する方法ですか?firefox webextention:storage.local.get()オプションを実行すると、結果が順番に実行されますか?
以下はバックグラウンドスクリプトです。アドオンアイコンをクリックすると、コンテンツスクリプトに「開始」メッセージが送信されます。コンテンツスクリプトからの結果を受け取ると、アイコンのタイトルが変更されます。
// background script
function sendMessageToTabs(tabs) {
for (let tab of tabs) {
browser.tabs.sendMessage(tab.id, {start: "start"}).then(response => {
browser.browserAction.setTitle({title: response.complete});
console.log(response.complete);
}).catch(onError); }}
function onError(error) { console.log(`Error: ${error}`); }
browser.browserAction.onClicked.addListener(function() {
browser.tabs.query({ currentWindow: true, active: true
}).then(sendMessageToTabs).catch(onError); });
以下はコンテンツスクリプトです。これは、オプションを読み込んで処理し、フィードバック結果をバックグラウンドスクリプトに送ります。
// content script
browser.runtime.onMessage.addListener(request => {
if (request.start) { var setting='5';
console.log("setting default: "+setting);
browser.storage.local.get().then(function(options){
setting=options.setting;
console.log("get options: "+setting);
},null);
console.log("after get options: "+setting);
return Promise.resolve({complete: setting+" processed"}); } });
コンソールログは
setting default: 5
after get options: 5
get options: 10
ですが、私が欲しいのは、私は私のコードを再構築し、周りの仕事を得た
setting default: 5
get options: 10
after get options: 10