簡體   English   中英

如何在回調nodejs中停止stream api

[英]how to stop a stream api in callback nodejs

嗨,我正在使用 binance api,它有一個 stream function,如下所示,我不知道在 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 stream 的方法。

  1. bookTickets stream 是在第 5755 行創建的。 如果它的處理程序被保存到某處的(可訪問的)變量中,您可以調用它的方法.close()來關閉 stream。 但...
  2. 第 5756 行僅返回其名稱,並且 stream 處理程序未保存到任何變量。 所以在bookTickers function之外,目前沒有辦法關閉stream。

最簡單的方法是在不需要數據時立即開始忽略 stream。 缺點當然是你在不需要的東西上浪費資源,並且打開你的應用程序有更多潛在的故障(如果 stream 拋出錯誤或導致 memory 泄漏怎么辦?)。

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連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM