【问题标题】:How to pass parameters from async function in javascript? [duplicate]如何从javascript中的异步函数传递参数? [复制]
【发布时间】: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 合二为一并从那里调用?

提前致谢!

【问题讨论】:

标签: javascript json asynchronous


【解决方案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);
    }
    

    【讨论】:

    • 没有解释的代码没有真正的教育意义。
    猜你喜欢
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-06
    • 2015-12-01
    • 1970-01-01
    • 2020-12-27
    • 1970-01-01
    相关资源
    最近更新 更多