Что такое fn в этом примере? - PullRequest
4 голосов
/ 22 июня 2011

В этом примере есть функция fn с нулевыми и ложными аргументами:

io.configure(function () {
  function auth (data, fn) {
    fn(null, false);
  };

  io.set('authorization', auth);
});

https://github.com/LearnBoost/Socket.IO-node/blob/master/test/manager.test.js#L400-403

Что такое fn и что она делает?

Означает ли это, например, функцию, вставьте здесь свою собственную функцию или это что-то еще?

Ответы [ 2 ]

3 голосов
/ 22 июня 2011

В этом примере fn - это функция, которая передается в auth() в качестве параметра, поэтому да, вы предоставляете auth() немного функциональности по вашему выбору.Это называется «функцией более высокого порядка», см. здесь для краткого введения.Это метод, в основном связанный с функциональным программированием , и, поскольку объектная ориентация Javascript, как правило, считается немного слабой, это стиль, к которому склонны более продвинутые программы в Javascript (Javascript иногда называют "* 1008"* Схема в одежде Java")

В этом точном коде: это часть набора тестов, поэтому он настраивает io на постоянную неудачу при авторизации, чтобы убедиться, что ошибка авторизации корректно обрабатывается(строка 408-409 на данный момент):

res.statusCode.should.eql(403);
data.should.match(/handshake unauthorized/);

Эти строки должны быть достигнуты без исключения, и тесты проверяют, что результаты содержат значимые значения.

0 голосов
/ 22 июня 2011

fn - это функция, переданная в качестве параметра в auth.

Здесь вызывается auth функция :

Manager.prototype.authorize = function (data, fn) {
  if (this.get('authorization')) {
    var self = this;

    this.get('authorization').call(this, data, function (err, authorized) {
      self.log.debug('client ' + authorized ? 'authorized' : 'unauthorized');
      fn(err, authorized);
    });
  } else {
    this.log.debug('client authorized');
    fn(null, true);
  }

  return this;
};

Итак, вы видитечто функция обратного вызова принимает два параметра, err и authorized.В тесте эти параметры устанавливаются на null и false.

Возможно, что в какой-то момент вы можете указать, каким должно быть fn, но это не обязательно!Возможно также, что эта функция всегда предоставляется библиотекой, и ваша задача - вызывать ее, когда вы устанавливаете функцию auth.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...