我知道co
有点过时了,但我仍然对它的工作原理感兴趣。但是,我发现很难理解该thunkToPromise
功能的目的:
function thunkToPromise(fn) {
var ctx = this;
return new Promise(function (res, rej) {
fn.call(ctx, function (err, res) {
if (err) return rej(err);
if (arguments.length > 2) res = slice.call(arguments, 1);
res(res);
});
});
}
thunk 是一个没有参数的函数,但fn
仍使用一个参数调用。此外还有这个奇怪的递归调用res(res)
,通常会导致堆栈溢出。这里发生了什么?我将如何申请thunkToPromise
,以便它做一些有意义的事情?