Асинхронность при отправке данных
Доброго времени суток!
Есть задача: Делаю API, который принимает список монет и список валют, после чего уходит запрос на сторонний внешний API и получает данные по конвертации монеты в указанные валюты. Так же, чтобы лишний раз не делать запросы, то я кеширую данные.
Проблема в том, что response уходит до того, как я сформирую данные. Понимаю,что дело в асинхронности, но не могу ее настроить правильно, чтобы работало, как я подразумеваю
код:
export async function getTickersConvertData (ctx: Koa.Context, next: Koa.Next): Promise<void> {
const { ticker, currency } = ctx.query
const tkr: string = ticker.toString()
const cur: string = currency.toString()
const arrayTickers = tkr.split(',')
const data = await arrayTickers.map(async (key) => {
const cacheKey = `convert${key}`
let convertsData = cashTickersConvert.get(cacheKey)
if (!convertsData) {
const data = await cryptoCompare(key, cur, true)
if (data) {
convertsData = data
cashTickersConvert.set(cacheKey, convertsData, 300)
} else {
throw new Error('No data was found')
}
}
return convertsData
})
ctx.body = <IObject> {
response: data,
}
await next()
}
Ответ, который приходит :
{
"response": [
{},
{},
{}
]
}
convertsData:
[
{ ETH: { USD: 3169.01, RUB: 232120.59, EUR: 2703.5 } },
{ BTC: { USD: 46067.83, RUB: 3378079.45, EUR: 39232.63 } },
{ LTC: { USD: 180.98, RUB: 12686.81, EUR: 153.41 } }
]