三余无梦

冬者岁之余,夜者日之余,阴雨者时之余也

Node-thunkify Code Reading

thunkify

code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function thunkify(fn) {
    assert('function' == typeof fn, 'function required');    

    return function () {
        var args = slice.call(arguments);    
        var ctx = this;
        return function (done) {   // done 是回调函数
            var called;
            args.push(function() {
                if (called) return;
                called = true;    
                done.apply(null, arguments); 
            }); // 将回调处理加入参数列表

            try {
                fn.apply(ctx, args);   // 函数处理 
            } catch (err) {
                done(err);   // 异常获取并用回调处理 
            }
        }
    }
};

例子

1
2
3
4
5
6
7
8
var thunkify = require('thunkify');
var fs = require('fs');


var read = thunkify(fs.readFile);

read('package.json', 'utf8')(function(err, str){
});