Попытка остановить поток: TypeError: _stream.abort не является функцией? - PullRequest
0 голосов
/ 13 октября 2018

Я пытаюсь создать поток с помощью Twitter Stream API.

  • У меня есть кнопка запуска, чтобы запустить поток.

  • У меня есть кнопка остановки, чтобы остановить поток.

Я использую веб-сокет, при котором при нажатии кнопки «Пуск» я начинаю потоковую передачу на стороне сервера.И когда нажата кнопка «Стоп», я уничтожаю поток _stream.abort() (я пробовал _stream.destroy() - та же ошибка)

index.js (серверная часть)

io.on('connection', function(socket) {
 // Socket Stream Button 
  const _stream = {};

  // Destroy on stopBtn is clicked
  socket.on('myapp:search', function(term) {
  console.log('received a new search:', term);
    _stream.abort();
  });

  // Listen to Start Button being clicked, value is emitted, start twitter stream
  socket.on('startStreaming', function()  {
    console.log("arguments::: ",arguments['0'])
    twitterStream(socket, _stream, arguments['0'], function(_stream) {
      _stream.on('data', function(tweet) {
        console.log(tweet.text + "Streaming");
        // socket.emit('tweet', tweet.text);
      });

      _stream.on('error', function(error) {
        console.log("erorr:: " + error);
        throw error;
      });

    });

  });
}

function twitterStream(socket, _stream, term, callback) {
    // return new Promise((resolve, reject) => {

      console.log("TERM _" +term);
      client.stream('statuses/filter', { track: term }, function(stream) {
        _stream = stream;

        callback(_stream);
      });

    // });
  }

Здесь я просто запускаю событие emit при нажатии кнопки «Пуск / Стоп».

Script.js (внешний интерфейс)

    function sendForm() {
       $("#startBtn").on('click', function() {
            //input(type="text" name="searchTerm" placeholder="#hastag" required)
            let searchTerm  = $("#searchedTerm").val();
            console.log(searchTerm);
            socket.emit('startStreaming', searchTerm, function(data) {
                console.log("stared");
            });
       }); 

       $("#stopBtn").on('click', function() {
            console.log("stop btn");
            socket.emit("myapp:search", function(data) {
                console("stopped stream" + data);
            }); 
        });
    }

ОШИБКА КОНСОЛИ УЗЛА: Ошибка типа: _stream.abort не является функцией

Desktop/assign2/routes/index.js:41
    _stream.abort();

ОШИБКА КОНСОЛИ БРАУЗЕРА:

The connection to ws://localhost:3000/socket.io/?EIO=3&transport=websocket&sid=ZZusoZ2GTYEGTebcAAAB was interrupted while the page was loading.

Source map error: TypeError: NetworkError when attempting to fetch resource.
    Resource URL: http://localhost:3000/socket.io/socket.io.js
    Source Map URL: socket.io.js.map[Learn More]

1 Ответ

0 голосов
/ 13 октября 2018

В начале файла скрипт устанавливает _stream для пустого объекта.Таким образом, методы, которые он пытается вызвать позже, не существуют.

...