2016-05-15 2 views
1

Я новичок с javascript, и я действительно не знаю, как я могу получить значение «сетей».Как я могу получить значение из этой переменной внутри функции?

scanner.scan(function(error, networks){ 
    if(error) { 
     console.error(error); 
    } else { 
     console.log(networks); << print the correct value 
    } 
}); 
console.log(networks) << print undefined 

Я просто хочу, чтобы использовать «сети» вне функции

Любой может мне помочь? Благодаря!

+0

- функция сканирования асинхронная? – bumbeishvili

+0

Ваш второй 'console.log (networks)' его вне области –

+0

@dato, да, это – carloseduleal

ответ

0

Добавьте переменную перед функцией сканирования и задать значение внутри функции:

var netValue = null; 
scanner.scan(function(error, networks){ 
    netValue = networks; 
    if(error) { 
     console.error(error); 
    } else { 
     console.log(networks); << print the correct value 
    } 
}); 
console.log(netValue); 

В последней строке до сих пор не может работать, хотя, если функция scanner.scan() представляет собой асинхронный вызов.

0

Вы можете создать глобальную сеть ценности, и обновлять, что из функции сканирования:

var globalNetworks; 

scanner.scan(function(error, networks){ 
    globalNetworks = networks; 
    if(error) { 
     console.error(error); 
    } else { 
     console.log(networks); << print the correct value 
    } 
}); 
console.log(networks) << print the correct value 

Я полагаю, что вы читали о том, как сфера работает в JavaScript: http://www.w3schools.com/js/js_scope.asp

0

Причины вы не можете получить значение networks, потому что оно завернуто в закрытие, значение доступно только внутри этой функции. Перейти здесь, чтобы прочитать больше о замыканиях:

How do JavaScript closures work?

Чтобы иметь доступ к нему снаружи вы можете создать еще одну переменную за пределами функции и установить, что в переменной network внутри функции:

var otherNetworks; 
scanner.scan(function(error, networks){ 
    otherNetworks = networks; 
    if(error) { 
     console.error(error); 
    } else { 
     console.log(networks); << print the correct value 
    } 
    }); 
console.log(otherNetworks) << print correctValue 
+0

. Я уже делал это раньше, но он отображает только глобальное значение, переменная обновляется внутри fuction, но не сохраняют свою ценность снаружи. – carloseduleal

+0

Я очень сомневаюсь, что вы можете воспроизвести это в jsfiddle или jsbin? – JordanHendrix

0

я уже делал это раньше, но это только показывает глобальное значение:

var globalNetworks = "global" 
var scanner = wifiscanner(); 

    scanner.scan(function(error, networks){ 
     globalNetworks = networks; 
     console.log(globalNetworks) //displaying all the wlan0 networks available 
     if(error) { 
     console.error(error); 
     } else { 
     // console.log(networks); 
     } 
    }); 

    console.log(globalNetworks) // displaying global 

btw, сети json

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