如何从javascript中的异步函数传递参数?

问题描述:

我想从两个异步函数传递两个值到函数,我不知道如何继续。下面是代码:如何从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

试试这个(简单地链接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

代码没有解释并不是真正的教育。 –

尝试使用$.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)})