2015-12-03 29 views
0

我想從兩個異步函數傳遞兩個值到函數,我不知道如何繼續。下面是代碼:如何從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) 

我知道這個問題是我打電話異步者之外的功能,所以它不recieving的數量和它給我一個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

試試這個(簡單地鏈接Ajax調用,最後調用在雙方的值可用的方法)

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)}) 
相關問題