2016-08-06 3 views
1

У меня есть функция, которая проверяет сохраненное значение через chrome.storage.sync.get и вставляет файл CSS после существования указанного сохраненного значения.Получить возвращаемое значение из async-функции в Javascript

Я понимаю, что 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- i-return-the-response-from-a-aynchronous-call) – Makyen

ответ

1

Просто передайте обратный вызов в функцию async.
Обратный вызов вызывается после завершения асинхронной операции.

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

function async_function(callback) { 
    something_async(function(result) { 
     callback(result); 
    }); 
} 

В вашем случае:

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

Смежные вопросы