javascript - 模块返回空数组

标签 javascript node.js async-await lodash

我有一个简单的模块 return,它进行一堆 API 调用来检索数据然后返回它

export default async function getCandles(coins) {
  let data = [];
  _.forEach(coins, async coin => {
    let candles1h = await client.candles({
      symbol: coin,
      interval: "1h",
      limit: 500
    });
    let candles2h = await client.candles({
      symbol: coin,
      interval: "2h",
      limit: 500
    });
    let candles4h = await client.candles({
      symbol: coin,
      interval: "4h",
      limit: 500
    });
    let candles1d = await client.candles({
      symbol: coin,
      interval: "1d",
      limit: 500
    });

    let candles = {
      "1h": candles1h,
      "2h": candles2h,
      "4h": candles4h,
      "1d": candles1d
    };

    data.push({ coin: candles });
  });

  return data;
}

我有一个测试文件,它输入数组参数并发送它

async function test() {
  let candles = await getCandles(coins);

  console.log(candles);
}

当我调用测试函数时,输出只是一个空数组。我在这里做错了什么?

最佳答案

问题是 getCandles() 无法知道每批异步函数 lodash.forEach() 创建解析的时间。

一个解决方案可能是使用 Promise.all() 调用您的异步函数批处理. Promise.all()await 并且可以同时发送多个调用,而不是按顺序发送。

请参阅下面的粗略示例。

// Get Candles.
const getCandles = async symbol => {
  const intervals = ['1h', '2h', '4h', '1d']
  const limit = 500
  const candles = await Promise.all(intervals.map(async interval => await client.candles({symbol, interval, limit})))
  return candles.reduce(async (c, x, i) => {
    c[intervals[i]] = x
    return c
  }, {})
}

// Get Coins.
const getCoins = async symbols => {
  const coins = symbols.map(async symbol => ({coin: await getCandles(symbol)}))
  return await Promise.all(coins)
}

// Test.
const test = async () => await getCoins(symbols)

关于javascript - 模块返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52133657/

相关文章:

azure - 在服务总线客户端中处理取消

c# - 如何捕获第三方库中未等待的任务抛出的异常?

javascript - 使用 setPosition 更改位置时 Google 标记消失

javascript - 从用户控件内部关闭 jQuery 对话框

javascript - 解释递归如何在算法中工作以确定二叉树的深度?

javascript - 无法连接到 Node JS 上的 Mysql 数据库

javascript - 安装 Node.js

javascript - 使用 Node.js 进行回调和返回

node.js - Node JS Dust 不会渲染新行

c# - 返回使用另一个异步函数的异步任务