2016-08-06 6 views
1

私はchrome.storage.sync.getによって格納された値をチェックし、上記の格納された値が存在するとCSSファイルを挿入する関数を持っています。JavaScriptでasync関数からの戻り値を取得

私はchrome.storage.sync.getが非同期関数であり、返り値がmakeAggressive()関数に期待通りに返ってこないことを認識しています。しかし、if (result == 'aggressive')の結果を得るためにこのコードをどのように書くべきか、私はmakeAggressive()に渡されました。

保存された値を取得し、その値をチェックし、結果を呼び出し元の関数に返すにはどうすればよいですか?

chrome.tabs.onUpdated.addListener(function(tabId, info, tab) { 
    if (info.status == 'complete') applyCSS(tab); 
}); 

function applyCSS(tab) { 
    var tabUrl = tab.url; 

    if (makeAggressive()) { 
     chrome.tabs.insertCSS(tab.id, { 
      file: "aggressive.css" 
     }); 
    } 
} 

function makeAggressive() { 
    chrome.storage.sync.get(function(items) { 
     var result = items.intensityLevel; 
     if (result == 'aggressive') { 
      return true; 
     } 
    }); 
} 
+2

可能な重複http://stackoverflow.com/questions/14220321/how-do-:あなたのケースでは

async_function(function() { // do something after async_function completes and invokes this callback }); function async_function(callback) { something_async(function(result) { callback(result); }); } 

i-return-from-as-asynchronous-call) – Makyen

答えて

1

単純にコールバックをasync関数に渡します。
非同期アクティビティが完了すると、コールバックが呼び出されます。

function applyCSS(tab) { 
    var tabUrl = tab.url; 

    makeAggressive(function() { 
     chrome.tabs.insertCSS(tab.id, { 
      file: "aggressive.css" 
     }); 
    }); 
} 

function makeAggressive(callback) { 
    chrome.storage.sync.get(function(items) { 
     var result = items.intensityLevel; 
     if (result == 'aggressive') { 
      callback(); 
     } 
    }); 
} 
[?私は非同期呼び出しからの応答を返すにはどうすればよい](の
+1

これはうまくいきましたが、これがうまくいった理由を理解するためにコールバックの周りに頭を浮かべる必要がありました。 – zeeshan

+0

リンクされた重複した質問の回答を読むか、他のチュートリアルを見つけてください。 – wOxxOm

関連する問題