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