协程库中thunk Promise的作用是什么?
What is the purpose of thunkToPromise in the co coroutine lib?
我知道 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
以便它做一些有意义的事情?
A thunk is a function without parameters
没有。 thunk 是一个函数,它只需要一个回调来转发它的结果。它确实没有 data 参数,没错,只有 "output parameter".
In addition there is this weird recursive call res(res)
它不是递归的,它只是坏了。有人混淆了 result
和 resolve
。您是否在当前版本的库中找到它?
我知道 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
以便它做一些有意义的事情?
A thunk is a function without parameters
没有。 thunk 是一个函数,它只需要一个回调来转发它的结果。它确实没有 data 参数,没错,只有 "output parameter".
In addition there is this weird recursive call
res(res)
它不是递归的,它只是坏了。有人混淆了 result
和 resolve
。您是否在当前版本的库中找到它?