【问题标题】:What is the purpose of thunkToPromise in the co coroutine lib?协程库中 thunk Promise 的作用是什么?
【发布时间】:2019-04-26 16:23:01
【问题描述】:

我知道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 以便它做一些有意义的事情?

【问题讨论】:

    标签: javascript promise coroutine thunk


    【解决方案1】:

    thunk 是一个没有参数的函数

    没有。 thunk 是一个只需要回调来转发其结果的函数。它确实不带 data 参数,这是真的,只有一个“输出参数”。

    另外还有这个奇怪的递归调用res(res)

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

    【讨论】:

    • 您的意思是协程上下文中的 thunk 总是期望继续吗?这是有道理的。
    • res(res) 确实是我的错,当我在 sublime 中轻率地使用 find/replace all 时。对不起!
    • @reify 是的,thunk 是一个需要延续的值。
    猜你喜欢
    • 2016-04-09
    • 2017-08-03
    • 2016-08-03
    • 2011-01-27
    • 1970-01-01
    • 2017-04-27
    • 2020-11-17
    • 1970-01-01
    相关资源
    最近更新 更多