2015-12-03 2 views
0

Я пытаюсь передать два значения функции из двух асинхронных функций, и я не уверен, как действовать. Вот код:Как передать параметры из функции async в javascript?

var btcPriceInUSD; 
var priceExchangeMXN; 
var btcLink = "https://blockchain.info/ticker"; 
var exchangeRateLink = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20%28%22USDMXN%22%29&env=store://datatables.org/alltableswithkeys&format=json"; 

//Get btc price in USD 
$.getJSON(btcLink, function(btcData) 
    { 
     btcPriceInUSD = btcData.USD.last; 
     //document.write(btcPriceInUSD); 
    });  


//Get current USD/MXN exchange rate 
$.getJSON(exchangeRateLink, function(exchangeData) 
    { 
     priceExchangeMXN = exchangeData.query.results.rate.Rate; 
     //document.write(priceExchangeMXN); 
    });  


//Convert btc price to MXN 
function convertToMXN(btc,toMXN){ 
    var result = parseFloat(btc) * parseFloat(toMXN); 
    document.write(result); 
} 


convertToMXN(btcPriceInUSD,priceExchangeMXN) 

Я знаю, что вопрос в том, что я называю функцию за пределами асинхронных них, так что не ПОЛУЧАТЬ число, и это дает мне NAN (не число), но я не Не знаю, как правильно передать те два параметра, которые извлекаются в разных функциях, возможно ли комбинировать btcPriceInUSD и priceExchangeMXN в одном и называть его оттуда?

Заранее благодарен!

+1

Вы можете захотеть взглянуть на обещания и JQuery.deffered объект. – Kodz

+0

Два первых ответа здесь объясняют решения в хорошем смысле: http://stackoverflow.com/questions/14031421/how-to-make-code-wait-while-calling-asynchronous-calls-like-ajax – Kodz

ответ

1

попробовать это (просто цепочки Аякса вызовов и, наконец, вызов метода, когда оба значения доступны)

var btcPriceInUSD; 
var priceExchangeMXN; 
var btcLink = "https://blockchain.info/ticker"; 
var exchangeRateLink = "http://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20yahoo.finance.xchange%20where%20pair%20in%20%28%22USDMXN%22%29&env=store://datatables.org/alltableswithkeys&format=json"; 

//Get btc price in USD 
$.getJSON(btcLink, function(btcData) 
    { 
     btcPriceInUSD = btcData.USD.last; 
     //document.write(btcPriceInUSD); 

     //Get current USD/MXN exchange rate 
     $.getJSON(exchangeRateLink, function(exchangeData) 
     { 
      priceExchangeMXN = exchangeData.query.results.rate.Rate; 
      //document.write(priceExchangeMXN); 
      convertToMXN(btcPriceInUSD,priceExchangeMXN); 
     }); 

    });  

//Convert btc price to MXN 
function convertToMXN(btc,toMXN){ 
    var result = parseFloat(btc) * parseFloat(toMXN); 
    document.write(result); 
} 
+0

Код без объяснение не является действительно образовательным. –

3

Попробуйте использовать $.when(), .then(), заменив возвращаемое значение на полную функцию для объявления переменных вне сферы асинхронных функций; также добавление обработчика ошибок

$.when($.getJSON(btcLink, function(btcData) { 
     return btcData.USD.last 
     })  
, $.getJSON(exchangeRateLink, function(exchangeData) { 
     return exchangeData.query.results.rate.Rate 
    })) 
.then(convertToMXN, function err() {console.log(arguments)}) 
Смежные вопросы