Я все еще учусь об асинхронности.
Я не могу заставить мой асинхронный код работать. У меня есть функция, которая вызывает API.
Я вызываю эту функцию для другой функции, чтобы потом иметь возможность манипулировать данными и объединять их.
Но мой код всегда идет вперед, не дожидаясь ответа первой функции.
Проблема асинхронности / обещания
var exchangeListing = {
"exchange":
[
{
"name": "Kraken",
"pair": ['XBTUSD','XETHUSD']
},{
"name": "Coinbase",
"pair": ["BTC-USD","ETH-USDC"]
},{
"name":"Bittrex",
"pair": ["BTC-USD","BTC-ETH"]
}
]
}
function BXgetPrice(currencies) {
var ret;
bittrex.getmarketsummary( { market : currencies}, function( data, err ) {
if(data!=null) {
ret = {
message: {
type: 'success',
data: {
last:data.result[0].Last,
volume:data.result[0].Volume,
date:data.result[0].TimeStamp,
}
}
};
return ret;
} else {
return;
}
});
return ret;
}
//Loop to get all data from all exchanges we need, and merge in a JSON, to send to HTML page
function exchangeListe(exchangeListing) {
var exchangeListing = JSON.stringify(exchangeListing);
var exchangeListing = JSON.parse(exchangeListing);
console.log(exchangeListing);
for(var i = 0, len = exchangeListing.exchange.length; i < len; i++) {
var a = exchangeListing.exchange[i].name;
for(var j=0, l=exchangeListing.exchange[i].pair.length; j<l; j++) {
if(a=="Kraken") {
//add code to manipulate data
} else if(a=="Bittrex") {
console.log("bittrex");
BXgetPrice(exchangeListing.exchange[i].pair[j], function(data,err){
console.log("hi"+data);
//add code to manipulate data
}) ;
} else if(a=="Coinbase") {
//add code to manipulate data
}
}
}
}
В списке Exchange мне нужен мой цикл, чтобы выполнить весь доступный обмен и все пары, получить данные из вызова API и объединить их после.
На данный момент, при запуске exchangeListe (exchangeListing), я не получаю данные из функции BXgetPrice. Данные пусты.
Я пытаюсь добавить асинхронную функцию на обоих и объявить как const + use await, но ничего не помогу, в этом случае я получаю Promise {}
Спасибо за вашу помощь