簡體   English   中英

通過異步函數傳遞變量

[英]Pass variable through asynchronous function

首先,我正在使用JQuery。 看一看:

$(document).ready(function() {
    var btcusd = 600;

    function getRate() {
        $.get("rate.php", function(data) {
            var btcArr = JSON.parse(data, true);
            btcusd = btcArr["last"];
            //This will give me the correct value
            console.log(btcusd);
        });
    }

    setInterval(function() {

        //This will say 600 every time
        console.log(btcusd);

        //Update rate for next loop
        getRate();

    }, 3000);
});

Chrome控制台每3秒給我600。 如果我在chrome實時控制台中手動執行此操作,則將獲得實際值,例如595.32。

為什么這不能按預期工作? 感謝幫助。

我認為@Tobbe在這里很重要。 您可以確認的一件事是添加諸如console.log( btcArr )類的東西,這應該告訴您是否要退回任何東西。

我設置了一個不太不同的演示,該演示應該一旦ajax回調成功更新值,就永遠不會回到600,這表明確實確實在回調中更改了該值,並且新值在ajax回調之外可用。

我使用的ajax代碼是:

function getRate() {
    var gafa = "https://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=100&q=";
    var url = gafa + encodeURI('http://news.yahoo.com/rss/sports/')+"&callback=?";
    $.getJSON(url, function(data) {
        //var btcArr = JSON.parse(data, true);
        var xData = data.responseData.feed.entries
        //btcusd = btcArr["last"];
        btcusd = xData.length;;
        //This will give me the correct value
        console.log(btcusd);
    });
}

其余的代碼是您自己的: 工作JSFIDDLE DEMO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM