将从API检索的变量相乘

时间:2014-08-26 10:00:06

标签: javascript coffeescript

getValue = ( url, callback) ->
  $.getJSON url, (json) ->
    value = json.last
    callback value


$(window).load ->

  btsx_btc = getValue "http://data.bter.com/api/1/ticker/btsx_btc", (data) ->
    $('#v_btsx_btc').html data

  btc_usd = getValue "http://data.bter.com/api/1/ticker/btc_usd", (data) ->
    $('#v_btc_usd').html data

  $('#v_btsx_usd').html btsx_btc*btc_usd

我是JavaScript和Coffeescript的新手。我可以成功检索2个值(btsx_btc& btsc_USD)。我想将这两个变量相乘并在中间显示它。但它不起作用,控制台没有显示任何错误。我假设2个变量以某种方式为空。我希望你们能帮忙

http://i.imgur.com/gTDaDpD.png

这是输出javascript

(function() {
  var getValue;

  getValue = function(url, callback) {
    return $.getJSON(url, function(json) {
      var value;
      value = json.last;
      return callback(value);
    });
  };

  $(window).load(function() {
    var btc_usd, btsx_btc;
    btsx_btc = getValue("http://data.bter.com/api/1/ticker/btsx_btc", function(data) {
      return $('#v_btsx_btc').html(data);
    });
    btc_usd = getValue("http://data.bter.com/api/1/ticker/btc_usd", function(data) {
      return $('#v_btc_usd').html(data);
    });
    return $('#v_btsx_usd').html(btsx_btc * btc_usd);
  });

}).call(this);

1 个答案:

答案 0 :(得分:1)

btc_usdbtsx_btc是承诺,而不是数字!你不能简单地将它们相乘 - 而你can't make the asynchronous getJSON return a number。相反,请使用jQuery.when等待两个值到达:

getValue = (url) ->
  $.getJSON url
  .then (json) ->
    json.last

$(window).load ->
  btsx_btc = getValue "http://data.bter.com/api/1/ticker/btsx_btc"
  btsx_btc.done (data) ->
    $('#v_btsx_btc').html data

  btc_usd = getValue "http://data.bter.com/api/1/ticker/btc_usd"
  btc_usd.done (data) ->
    $('#v_btc_usd').html data

  $.when btsx_btc, btc_usd
  .done (data1, data2) ->
    $('#v_btsx_usd').html data1*data2