协程库中thunkToPromise的目的是什么?

时间:2018-11-24 10:13:34

标签: javascript promise coroutine thunk

我知道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使其有意义?

1 个答案:

答案 0 :(得分:0)

  

thunk是没有参数的函数

不。 thunk是仅需要回调转发其结果的函数。它确实不需要任何 data 参数,这是正确的,只有一个“输出参数”。

  

此外,还有一个奇怪的递归调用res(res)

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