gpt4 book ai didi

javascript - 从 API 获取实时数据到路由

转载 作者:行者123 更新时间:2023-11-30 14:56:51 24 4
gpt4 key购买 nike

我正在使用以下两个文件从两个 API 获取数据。请在下面找到我的最小可行示例:

poloniex.js

const Poloniex = require('poloniex-api-node')
const poloniex = new Poloniex()

async function getExchangeTicker() {
poloniex.returnTicker((err, ticker) => {
if (err) {
console.log(err.message)
} else {
//console.log(ticker)
return ticker
}
})
}

module.exports = {
getExchangeTicker,
}

cctx.js

const ccxt = require ('ccxt')

async function getExchangeTicker() {
const bitfinex = new ccxt.bitfinex({ verbose: true })
const data = await bitfinex.fetchTicker()
return data
}

module.exports = {
getExchangeTicker,
}

scheduler.js

const exchangePoloniex = require('../exchange/poloniex')
const exchangeCCTX = require('../exchange/cctx')

async function getAllTickers() {
const exchanges = [
exchangePoloniex,
exchangeCCTX,
]

let res
exchanges.forEach((exchange) => {
res = exchange.getExchangeTicker()
})
return res
}

async function runScheduler() {
let res
setInterval(() => {
this.res = getAllTickers()
}, 3000)
console.log("res: " + res)
return res
}

runScheduler()

我正在运行一个调度程序来汇集这些文件中的数据,但只返回 res: undefined

对于如何从这两个 API 正确获取数据有什么建议吗?

非常感谢您的回复!

最佳答案

我不知道你正在访问的两个 API,所以我无法真正判断你的代码来自 poloniex.js 还是 cctx.js 是好的 - 我假设你可以通过 console.logs 等告诉你正在分别从每个获取您需要的 API 数据。

但我可以在您的 scheduler.js 文件中看到一些逻辑问题:

  1. getAllTickers 中,您的 .forEach 循环会在每次迭代时覆盖 res,因此只有最后一个结果可见。
  2. 因为它是一个async 函数,getAllTickers 返回一个 promise 。您需要对返回的内容使用 .then 或类似的东西。
  3. runScheduler 中的 console.log 和返回在 setInterval 有机会执行之前完成,即使只有一次,因此那里没有可用数据。

我认为以下设置可能是您想要的:

const exchangePoloniex = require('../exchange/poloniex')
const exchangeCCTX = require('../exchange/cctx')

async function getAllTickers() {

let updatedTickers = []
updatedTickers[0] = await exchangePoloniex.getExchangeTicker()
updatedTickers[1] = await exchangeCCTX.getExchangeTicker()

return updatedTickers
}

function runScheduler() {
let tickers
setInterval(() => {
tickers = getAllTickers()
console.log(tickers) // tickers is a promise at this point

tickers.then((data) => {
console.log(data) // should be the data returned from your apis
// store the data in your db
})
}, 3000)
}

runScheduler()

请注意 runScheduler 不必是异步的,因为您没有对返回值执行任何操作 - 所有工作都在 setInterval 回调中

如果您需要提供此数据以响应浏览器请求,则可以从您的数据库中获取它,知道它已在过去 3 秒内更新。

关于javascript - 从 API 获取实时数据到路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47121943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com