协程库中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)

它不是递归的,它只是坏了。有人混淆了 resultresolve。您是否在当前版本的库中找到它?