如何从javascript中的异步函数传递参数? [复制]
Posted
技术标签:
【中文标题】如何从javascript中的异步函数传递参数? [复制]【英文标题】:How to pass parameters from async function in javascript? [duplicate] 【发布时间】:2016-03-07 15:53:01 【问题描述】:我正在尝试将两个值从两个异步函数传递给一个函数,但我不确定如何继续。代码如下:
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 合二为一并从那里调用?
提前致谢!
【问题讨论】:
你可能想看看 promises 和 JQuery.defered 对象。 这里的前两个答案很好地解释了解决方案:***.com/questions/14031421/… 【参考方案1】:尝试使用$.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))
【讨论】:
【参考方案2】:试试这个(简单地链接 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);
【讨论】:
没有解释的代码没有真正的教育意义。以上是关于如何从javascript中的异步函数传递参数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章