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流中取消订阅的方法。
bookTickets
流在第5755行创建。如果它的处理程序保存到某个(可访问的(变量中,则可以调用它的方法.close()
来关闭流。但是- 在第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)
}