Node.js,bitfinex-api-node:如何正确设置以处理来自websocket-connection的数据

问题描述 投票:1回答:1

请为这个问题道歉,我不是一个经验丰富的程序员,在node.js中更是如此

我的意图很简单:我想使用我通过npm安装的bitfinex-api-node软件包(用于bitfinex加密货币交换的node.js包装)来读取交易所各种货币对的价格数据,以计算更好的交易策略。

readme.md中提供的示例代码工作正常,这是一个精简版本,它创建一个BFX对象,该对象订阅给定货币对的股票代码并不断输出股票代码数据:

const BFX = require('bitfinex-api-node')

const API_KEY = 'secret'
const API_SECRET = 'secret'

const opts = {
  version: 2,
  transform: true
}

const bws = new BFX(API_KEY, API_SECRET, opts).ws


bws.on('open', () => {
  bws.subscribeTicker('BTCUSD') 
})

bws.on('ticker', (pair, ticker) => {
  console.log('Ticker:', ticker)
})

bws.on('error', console.error)

到现在为止还挺好。现在,为了一个简单的例子,假设我想得到两个货币对(BTC / USD,ETH / USD)的当前价格,并为它们添加显示结果。我明显天真的做法是这样的:

const BFX = require('bitfinex-api-node')

const API_KEY = 'secret'
const API_SECRET = 'secret'

const opts = {
  version: 2,
  transform: true
}

const bws1 = new BFX(API_KEY, API_SECRET, opts).ws
const bws2 = new BFX(API_KEY, API_SECRET, opts).ws

var priceBTCUSD;
var priceETHBTC;

bws1.on('open', () => {
  bws1.subscribeTicker('BTCUSD') 
})
bws2.on('open', () => {
  bws2.subscribeTicker('ETHUSD') 
})

bws1.on('ticker', (pair, ticker) => {
  //console.log('Ticker1:', ticker.LAST_PRICE)
  priceBTCUSD = ticker.LAST_PRICE
})
bws2.on('ticker', (pair, ticker) => {
  //console.log('Ticker2:', ticker.LAST_PRICE)
  priceETHBTC = ticker.LAST_PRICE
})

bws1.on('error', console.error)
bws2.on('error', console.error)
//HERE IT COMES:
console.log(priceBTCUSD+priceETHBTC)

最后一行的结果输出是“NaN”。似乎最后一行将所需结果记录到控制台是在BFX对象建立连接并接收任何数据之前执行的。

如何正确设置?如何从接收的数据流中检索数据?我真的需要每个货币对的BFX-websocket对象吗?如何读取价格数据一次,关闭websocket连接(在读取价格一次后不需要)并重新连接以读取不同货币对的价格?

谢谢!如果我的问题不够明确,请随意申请更多数据。

亲切的问候,s

javascript node.js npm websocket
1个回答
1
投票

哦,你的console.log太快了。试试这个(我跳了几行):

bws1.on('ticker', (pair, ticker) => {
  //console.log('Ticker1:', ticker.LAST_PRICE)
  priceBTCUSD = ticker.LAST_PRICE;
  printResults();
})
bws2.on('ticker', (pair, ticker) => {
  //console.log('Ticker2:', ticker.LAST_PRICE)
  priceETHBTC = ticker.LAST_PRICE
  printResults();
})

bws1.on('error', console.error)
bws2.on('error', console.error)
//HERE IT COMES:
function printResults() {
  if (priceBTCUSD && priceETHBTC)
    console.log(priceBTCUSD+priceETHBTC)  
}

现在,这不是最好的方法,但它可以帮助您实现目标。更好的方法是在同一个websocket上同时询问两个价格,因此当您同时获得两个价格时,请调用此函数来计算结果。

© www.soinside.com 2019 - 2024. All rights reserved.