这个标题是不是太响亮了?!
刚看了[[[[[[[[[[[[[[[[[[[[[[[[@suqian](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian)](/user/suqian) 关于connect与koa的帖子,发现有用到一个require('thunkify-wrap');
,于是好奇,找到了TJ的thunkify模块,thunkify-wrap没仔细去看,应该是对thunkify的功能进行了扩充吧。
对thunkify的那几十行代码看了估计都有一个小时吧,总算是明白了,IQ捉急啊。。。
觉得可以稍微改下,也许可以更好懂一点。
function thunkify(fn){
return function(){
var args = [].slice.call(arguments);
var results;
var cb;
function callback(){
if (results && cb) {
cb.apply(this, results);
}
}
args.push(function(){
results = arguments;
callback.apply(this);
});
fn.apply(this, args);
return function(fn){
cb = fn;
callback.apply(this);
}
}
};
主要两点改动,一是把两次判断是否执行cb合并到了一起,二是去掉对called的判断。 对于第二点,TJ在已发的PR回复说 ”the called check is to prevent double callbacks“ 但不会有两次callback都成功的吧,只有一次callback会成功执行。
本准备直接发PR的,想想先让各位大大过目一下,看看这样是否合适。