maximsohryakov
@maximsohryakov
MiMEKiZ

Как работает этот кусок кода на js?

В одном из модулей, полученных с npm увидел такое в конце
return this.on('camdata', function(data) {
      return self.wsServer.broadcast(data);
    });
  };


метод целиком
VideoStream.prototype.pipeStreamToSocketServer = function() {
    var self;
    self = this;
    this.wsServer = new ws.Server({
      port: this.wsPort
    });
    this.wsServer.on("connection", function(socket) {
      return self.onSocketConnect(socket);
    });
    this.wsServer.broadcast = function(data, opts) {
      var i, results;
      results = [];
      for (i in this.clients) {
        if (this.clients[i].readyState === 1) {
          results.push(this.clients[i].send(data, opts));
        } else {
          results.push(console.log("Error: Client (" + i + ") not connected."));
        }
      }
      return results;
    };
    
    return this.on('camdata', function(data) {
      return self.wsServer.broadcast(data);
    });
  };



И никак не могу понять, что возвращает return?
Если посудить, то this.on подписывает текущий экземпляр объекта с классом VideoStream на событие, в обработчике которого возвращается массив сообщения (по сути, broadcast рассылает всем клиентам полученный кусок данных).
Но что возвращает return this.on(...); ? Если ничего, то в чем суть?

p.s. так выглядит код, подключающий эту библиотеку
(function() {
  var VideoStream;

  VideoStream = require('./videoStream');

  module.exports = VideoStream;

}).call(this);


И еще выше идет вызов конструктора этого класса с заданием параметров.

Сам констркутор
конструктор
VideoStream = function(options) {
    this.name = options.name;
    this.streamUrl = options.streamUrl;
    this.width = options.width;
    this.height = options.height;
    this.wsPort = options.wsPort;
    this.inputStreamStarted = false;
    this.stream = void 0;
    this.startMpeg1Stream();
    this.pipeStreamToSocketServer();
    return this;
  };

  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
0xD34F
@0xD34F
Но что возвращает return this.on(...); ? Если ничего, то в чем суть?

А вы откройте код метода on, и посмотрите. Я бы предположил, что он возвращает this - чтобы сделать возможным method chaining.

UPD. Ну да, так и есть. Нашёл код модуля, о котором вы говорите - VideoStream наследуется от EventEmitter'а, в документации к которому насчёт метода on прямым текстом сказано, что

Returns a reference to the EventEmitter, so that calls can be chained
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы