从节点js回调

时间:2018-01-04 03:25:35

标签: javascript node.js callback

我正在使用node.bittrex.api而没有问题。我正在浏览记录循环并为每条记录调用getticker。 getticker调用返回值async,这很好,但我想从循环外的记录中得到一些其他数据,这时循环一直运行到结束,而我的回调只使用货币中最后一条记录的值数组,这是预期的。

var currencies = [{code:'btc-eth', fee:0.2},{code:'btc-ltc', fee:0.1},{code:'btc-ada', fee:0.5}];

for (index in currencies) {
    bittrex.getticker({ market: currencies[index].code }, function (data, err) {
        console.log("Currency: " + currencies[index].code);
        console.log("Fee: " + currencies[index].fee);
        console.log("Ticker: " + data);
    });
}

这可以在没有传递参数的情况下完成(我可以做,但不想分包)。

1 个答案:

答案 0 :(得分:0)

您可以使用立即功能来完成此操作。

var currencies = [{code:'btc-eth', fee:0.2},{code:'btc-ltc', fee:0.1},{code:'btc-ada', fee:0.5}];

for (index in currencies) {
    (function(idx){
      bittrex.getticker({ market: currencies[idx].code }, function (data, err) {
        console.log("Currency: " + currencies[idx].code);
        console.log("Fee: " + currencies[idx].fee);
        console.log("Ticker: " + data);
      });
    })(index);
}

为简洁起见,这也可以写成:

var currencies = [{code:'btc-eth', fee:0.2},{code:'btc-ltc', fee:0.1},{code:'btc-ada', fee:0.5}];

for (index in currencies) {
    f(index);
}

function f (idx){
  bittrex.getticker({ market: currencies[idx].code }, function (data, err) {
    console.log("Currency: " + currencies[idx].code);
    console.log("Fee: " + currencies[idx].fee);
    console.log("Ticker: " + data);
   });
  }

如果您使用let支持的节点版本并避免使用IIFE,

for ( let index in currencies)