如何在回调nodejs中停止流api
how to stop a stream api in callback nodejs
嗨,我正在使用 binance api,它有一个如下所示的流函数,我不知道如何在 if 语句为真后停止它。
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)
谢谢。
根据上下文,我看到您正在使用 binance-node-api。
不幸的是,他们的代码没有取消订阅特定 websocket 流的方法。
bookTickets
流是在 line 5755 上创建的。如果它的处理程序被保存到某处的(可访问的)变量中,您可以调用它的方法 .close()
来关闭流。但是...
- 在 line 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)
}
嗨,我正在使用 binance api,它有一个如下所示的流函数,我不知道如何在 if 语句为真后停止它。
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)
谢谢。
根据上下文,我看到您正在使用 binance-node-api。
不幸的是,他们的代码没有取消订阅特定 websocket 流的方法。
bookTickets
流是在 line 5755 上创建的。如果它的处理程序被保存到某处的(可访问的)变量中,您可以调用它的方法.close()
来关闭流。但是...- 在 line 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)
}