如何在回调nodejs中停止流api



hi我使用的是binanceapi,它有一个类似下面的流函数,我不知道如何在if语句为true后停止它。

binance.websockets.bookTickers("BNBUSDT", (res) => {
if (res.bestAsk > 250) {
// i want to finish this stream here
}
});

运行结果如下:

{
updateId: 4510982,
symbol: 'BNBUSDT',
bestBid: '276.10010000',
bestBidQty: '0.24000000',
bestAsk: '277.77770000',
bestAskQty: '0.99000000'
}
(always running - infinite loop)

谢谢。

从上下文中,我看到您正在使用二进制节点api。

不幸的是,他们的代码没有从特定的websocket流中取消订阅的方法。

  1. bookTickets流在第5755行创建。如果它的处理程序保存到某个(可访问的(变量中,则可以调用它的方法.close()来关闭流。但是
  2. 在第5756行,只返回其名称,并且流处理程序不保存到任何变量。因此,除了bookTickers函数之外,目前还没有关闭流的方法

最简单的方法是在不需要数据时立即开始忽略流。当然,缺点是你在不需要的东西上浪费资源,打开你的应用程序会出现更多潜在的故障(如果流引发错误或导致内存泄漏怎么办?(。

const Binance = require('node-binance-api');
const binance = new Binance();
let isTickersProcessed = false;
const websocket = binance.websockets.bookTickers("BNBUSDT", (res) => {
if (isTickersProcessed) {
return;
}
if (res.bestAsk > 250) {
console.log(res);
isTickersProcessed = true;
}
});

或者使用不同的包装器模块,使您能够更好地控制流。或者使用websocket直接连接。

这就是终止所有套接字连接的方法:

let endpoints = binance.websockets.subscriptions();
for (let endpoint in endpoints) {
console.log(endpoint);
binance.websockets.terminate(endpoint)
}

最新更新