2014-02-05 4 views
1

Звучит как основной вопрос, но я застрял в области видимости переменной javascript. Я хочу получить значение функции, которое было передано как аргумент другой функции.javascript как получить функцию возвращаемое значение из аргумента функции

Пример: Глобальная переменная number1 всегда возвращает начальное значение '' вместо значения второго аргумента функции get.

Что не так?

var number1 = ''; 
    cordova.require("applicationPreferences").get("NumTel",function (value) { 
      number1 = value; 
     }, 
     function (error) {} 
    ); 
    console.log("Number1 = " + number1); 

ответ

3

Потому что у вас есть по крайней мере один асинхронная операция, вы не можете получить это значение из функции, так как эта функция будет вызвана когда-нибудь в будущем, после того, как долго ваш console.log() заявления уже выполнило.

В асинхронном программировании вы должны использовать value либо внутри обратного вызова, либо вы должны вызвать другую функцию из обратного вызова и передать его value. Чтобы использовать асинхронное программирование в javascript, вы должны изменить свое дизайнерское мышление. Вы не можете просто использовать синхронные методы, потому что поток кода больше не синхронный.

Переместите всю свою логику, которая хочет использовать это значение в самом обратном вызове.

cordova.require("applicationPreferences") 
     .get("NumTel", function (value) { 
      // put all your code here that uses value 
      // or call another function and pass the value to it 
      myFunc(value); 
     }, function (error) { 
     } 
); 

function myFunc(x) { 
    console.log("Number1 = " + x); 
} 

Или, вы можете сделать это даже без анонимной функции:

cordova.require("applicationPreferences") 
     .get("NumTel", myFunc, function (error) { 
     } 
); 

function myFunc(x) { 
    console.log("Number1 = " + x); 
} 
+0

если имя функции, нет никакой необходимости в пустую обертку ... – dandavis

+0

@dandavis - я добавил этот опция тоже. – jfriend00

+0

Работа идеально. Большое спасибо за четкое объяснение. – nicBBB

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