Получить значения из списка внутри узла js callback [duplicate]

1

Я использую 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);
    });
}

Это можно сделать БЕЗ сквозных параметров (что я могу сделать, но не хочу разветвлять пакет).

Теги:
callback

1 ответ

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)
  • 0
    Не могли бы вы пояснить это? Где у вас (индекс), я думаю, это то, что будет инициировать вызов getticker. Но как это удерживает значение индекса?
  • 0
    Вы вызываете анонимную функцию с индексом в качестве аргумента. Обратите внимание на (index) в конце определения функции. Это гарантирует, что ваш текущий индекс будет записан как idx в закрытии, и ваш обратный вызов будет использовать этот idx
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню