2015-05-23 3 views
0

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

Код:

function hexToBase58(inputNumber) { 
    var output = ""; 
    $.getScript("JavaScript/biginteger.js", function(){ 
     //hexToDecimal 
     var sum = new BigInteger(); 
     for (var i = 0;i<inputNumber.length;i++) 
     { 
      sum = sum.multiply(new BigInteger(16)).add(new BigInteger(hexToDecimalChar(inputNumber.charAt(i))));  
     } 

     //decimalToBase58 
     var rest = new Array(); 
     var base = new BigInteger(58); 
     var i = 0;   
     do 
     {  
      rest[i] = sum.remainder(base).valueOf(); 
      sum = sum.divide(base); 
      i++; 
     }while(sum.valueOf() > 0) 
     for(var j=0;j<i;j++) 
     { 
      output = output + decimalToBase58Char(rest[i-j-1]); 
     } 
     console.log(output);  
    }); 
    console.log(output); 
    return output; 
} 

Я получаю два выхода:

  • ""
  • "5KAvT6dYsRsGdZKQoh2tCLvoFanZhXcGZUwqNs3RtcsWMojkSnA"

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

Очень поздно, и я много пробовал. Я думаю, может быть, аякс может помочь. Но у меня нет опыта работы с ajax.

+0

Вы делаете возвращение до '$ .getScript' заканчивается. '$ .getScript' - асинхронный. – Rudy

ответ

0

Не загружайте сценарий, используя $.getScript, но просто с тегом <script>.

<script src="JavaScript/biginteger.js"></script> 

Тогда ваша функция может быть без части прибудет сценарий:

function hexToBase58(inputNumber) { 
    var output = ""; 
    //hexToDecimal 
    var sum = new BigInteger(); 
    for (var i = 0;i<inputNumber.length;i++) 
    { 
     sum = sum.multiply(new BigInteger(16)).add(
      new BigInteger(hexToDecimalChar(inputNumber.charAt(i))));  
    } 

    //decimalToBase58 
    var rest = new Array(); 
    var base = new BigInteger(58); 
    var i = 0;   
    do 
    {  
     rest[i] = sum.remainder(base).valueOf(); 
     sum = sum.divide(base); 
     i++; 
    }while(sum.valueOf() > 0) 
    for(var j=0;j<i;j++) 
    { 
     output = output + decimalToBase58Char(rest[i-j-1]); 
    } 
    return output; 
} 
+0

Спасибо. Оно работает. – cryp71x

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