Javascript 模块返回空数组
我有一个简单的模块返回,它通过一系列API调用来检索数据,然后返回数据Javascript 模块返回空数组,javascript,node.js,async-await,lodash,Javascript,Node.js,Async Await,Lodash,我有一个简单的模块返回,它通过一系列API调用来检索数据,然后返回数据 export default async function getCandles(coins) { let data = []; _.forEach(coins, async coin => { let candles1h = await client.candles({ symbol: coin, interval: "1h", limit: 500 });
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);
}
当我调用test函数时,输出只是一个空数组。我在这里做错了什么?问题是
getcands()
无法知道每批异步函数lodash.forEach()
何时创建解决方案
一种解决方案可能是使用调用异步函数批Promise.all()
可以wait
并允许同时发送多个调用,而不是按顺序发送
请参见下面的粗略示例
// 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)
我想我会这么做的。但我不确定我是否试过
export default async function getCandles(coins) {
return await _.map(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
});
return {
coin: {
"1h": candles1h,
"2h": candles2h,
"4h": candles4h,
"1d": candles1d
}
};
});
}
coins
是一组符号,它们是参数(符号),我打算等待烛台数据,将其捆绑成一个对象(1h、2h、4h和1d),然后返回。我部分不理解您的代码,正在查看Promise.all()
有一段时间是的,我稍微更改了语言(从硬币到符号),并拆分了函数以确保可读性。总体目标仍然是一样的。从本质上讲,问题在于getcandies()
没有等待lodash.forEach()
来解决Promise.all()
提供了一种方法,可以在何时解析并同时运行多个调用时发出信号。如果我的回答不清楚,请原谅。我试图把问题的症结归结起来。让我知道这是否有效