我正在将 Node.js 与 Express 结合使用,并尝试通过调用另一个 API 来填充 2 个数组。
我的问题是我的响应总是返回空数组。
我认为这是因为 Promise 是异步的,并且在我发送响应之前回调不会执行。
我尝试用 then 实现 async/await before 函数,但没有成功...
app.get('/test', (req, res) => {
let APIKey = 'Udt4dOLtw4TI7mEhfSZHJ5TbgGC9q7kB';
let SecretKey = 'HV7bzQrDmUJpVz1UyjWpy2sle9Ly/WYj';
hitbtc.auth(APIKey, SecretKey);
let buy = [];
let sell = [];
hitbtc.symbols().then(symbols => {
symbols.forEach((symbol) => {
let open = [];
let timeStamp = [];
let i = 0;
console.log(symbol.id);
hitbtc.candles(symbol.id, {limit: 15, period: "H1"}).then(result => {
result.forEach(element => {
open.push(element.open);
timeStamp.push(element.timestamp);
});
tulind.indicators.rsi.indicator([open], [14], function (err, results) {
if (results[0] > 80) {
console.log("sell : ", symbol.id, " RSI value : ", results[0]);
sell.push(symbol.id);
} else if (results[0] < 20) {
console.log("buy : ", symbol.id, " RSI value : ", results[0]);
buy.push(symbol.id);
}
});
})
.catch(e => {
//console.log(e);
});
});
res.status(200).json({
success: true,
buy: buy,
sell: sell
})
});
});
我期望将买卖数组归档到 res.status(200) 响应中。
感谢您的帮助。
最佳答案
您应该将响应移至 Promise 内,否则它将在您从 API 获取结果之前执行
使用您的代码的示例:
app.get('/test', (req, res) => {
let APIKey = 'Udt4dOLtw4TI7mEhfSZHJ5TbgGC9q7kB';
let SecretKey = 'HV7bzQrDmUJpVz1UyjWpy2sle9Ly/WYj';
hitbtc.auth(APIKey, SecretKey);
let buy = [];
let sell = [];
hitbtc.symbols().then(symbols => {
symbols.forEach((symbol) => {
let open = [];
let timeStamp = [];
let i = 0;
console.log(symbol.id);
hitbtc.candles(symbol.id, {limit: 15, period: "H1"}).then(result => {
result.forEach(element => {
open.push(element.open);
timeStamp.push(element.timestamp);
});
tulind.indicators.rsi.indicator([open], [14], function (err, results) {
if (results[0] > 80) {
console.log("sell : ", symbol.id, " RSI value : ", results[0]);
sell.push(symbol.id);
} else if (results[0] < 20) {
console.log("buy : ", symbol.id, " RSI value : ", results[0]);
buy.push(symbol.id);
}
});
res.status(200).json({
success: true,
buy: buy,
sell: sell
});
})
.catch(e => {
//console.log(e);
});
});
});
});
关于node.js - 如何在 Promise 中使用异步函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58041652/