2011-06-22 11 views
4

、ヌルと偽の引数を持つのFN機能があります:この例では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であり、それは何をするのでしょうか?

ここでは、関数の例を示していますが、ここに独自の関数を張っているという意味ですか、それとも別の意味ですか?

+0

問題のコードを常に追加してください。 –

答えて

2

この例では、fnauth()にパラメータとして渡される関数なので、auth()には独自の機能が少し用意されています。これは「高次関数」と呼ばれています。短い紹介についてはhereを参照してください。これは主にfunctional programmingに関連付けられているテクニックです.Javascriptのオブジェクトの向きは一般的に少し弱いと考えられますので、Javascriptでより高度なプログラムを使用するスタイルです(Scheme in Java's clothingと呼ばれることがあります)。正確なコード:べきで

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

これらの行:それはテストスイートの一部ですので、それは常に認証に失敗するioを設定し、認証の失敗が正常に処理されていることを確認するために(一瞬ライン408から409)で例外なしで到達し、テスト結果に意味のある値が含まれているかどうかがチェックされます。

+0

私は、JSオブジェクトの向きは非常に強力であると言います。 –

+0

私はそれもかなり大丈夫だと思いますが、少し難解です(伝統的な継承を望むなら自分で提供しなければならない)ので、機能的なイディオムのより一般的な使用です。 –

0

fnは、パラメータとしてauthに渡される関数です。

auth機能is called hereは:

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; 
}; 

は、だから、コールバック関数は、2つのパラメータ、errauthorizedを受け入れていることがわかります。テストでは、これらのパラメータはnullfalseに設定されています。

ある時点では、fnを指定する必要がありますが、これは必須ではありません。また、この関数はライブラリによって常に提供されることがあり、auth関数を設定すると呼び出すことがあなたの仕事です。

関連する問題