2014-09-08 2 views
0

У меня есть небольшая проблема, из-за отсутствия у меня experiance с JS ...Javascript протоколирования Функция консоли из другой функции

У меня есть функция в моем файле, который протоколирование правильно утешать, но так или иначе, не возвращает то же значение, что регистрируется (или, может быть, я не знаю, как вытащить его ..)

function getStoragex() { 
    chrome.storage.sync.get('alertsOn', function(data) { 
      var optionShowAlertsx = data; 
      console.info("This is logging ok" + optionShowAlertsx.alertsOn); 
      return optionShowAlertsx.alertsOn; 
     }); 

    } 

каротаж является:

DATA true 

Позже, у меня есть это (внутри другой функции )

var optionShowAlerts = getStoragex(); 
console.info("This is logging undefined " + optionShowAlerts); 

Что я делаю неправильно?

ответ

1

Ваш return заявление находится в анонимной функции, которую вы передаете chrome.storage.sync.get. Ваша функция getStoragex никогда не выдает return, и поэтому звонок к ней получает результат undefined.

Если chrome.storage.sync.get является синхронного функции (которая, кажется, что это может быть от имени), вы можете сделать это:

function getStoragex() { 
    var rv; 

    chrome.storage.sync.get('alertsOn', function(data) { 
      var optionShowAlertsx = data; 
      console.info("This is logging ok" + optionShowAlertsx.alertsOn); 
      rv = optionShowAlertsx.alertsOn; 
     }); 

    return rv; 
    } 

(Это бодрящий стиль мне незнаком, Извинение, если Я испортил его)

Edit:. Он смотрит на меня, как будто sync в том, что имя не должен делать с функцией является синхронной или асинхронным но, скорее, с синхронизацией данных.

Если это asynchonous, то вы можете не возвращать результат из getStoragex, потому что getStoragex возвращается прежде, чем результат налицо. В этом случае, вы можете принять обратный вызов, который вы, гм, перезвоните в результате, когда у вас есть:

function getStoragex(callback) { 
    chrome.storage.sync.get('alertsOn', function(data) { 
      var optionShowAlertsx = data; 
      console.info("This is logging ok" + optionShowAlertsx.alertsOn); 
      callback(optionShowAlertsx.alertsOn); 
     }); 

    } 

Попеременно, обещания набирают большую популярность в данный момент. Вы можете изучить один из них (доступно несколько реализаций). Результат все равно будет асинхронным, если chrome.storage.sync.get является асинхронным.

+0

Просто начать читать ваш ответ, я сразу же получил эту проблему. Раньше я возвращался в нужное место, Но где-то вдоль линии я переехал ... Спасибо большое! –

0

Ваше заявление return возвращает значение chrome.storage.sync.get метод 2-го параметра. он не вернется к методу getStoragex().

попробовать это

function getStoragex() { 
    var optionShowAlertsx; 
    chrome.storage.sync.get('alertsOn', function(data) { 
      optionShowAlertsx = data; 
      console.info("This is logging ok" + optionShowAlertsx.alertsOn); 
     }); 
return optionShowAlertsx.alertsOn 
    } 
var optionShowAlerts = getStoragex(); 
console.log("This is logging undefined " + optionShowAlerts); 
Смежные вопросы