我正在使用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);
});
}
这可以在没有传递参数的情况下完成(我可以做,但不想分包)。
答案 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)