【问题标题】:Bluebird: Get reference to original function that was promisifiedBluebird:获取对已承诺的原始函数的引用
【发布时间】:2015-08-30 18:06:56
【问题描述】:

在使用 bluebird 对特定函数执行 promisify 之后 - 是否可以获得对已承诺的原始函数的引用?

为什么:我正在使用从函数中获取参数名称的帮助程序,并且在它返回 (_arg0, _arg1, _arg2) 的承诺函数上,我希望可以从某个地方获取原始函数签名。

【问题讨论】:

  • 这可能会有所帮助......函数的承诺版本的名称获取后缀“异步”。把它去掉,你就会回到原来的名字。在任何函数内部,函数本身都是arguments.callee,它的名字是arguments.callee.name
  • 为什么不在承诺之前将原始函数保存到自己的变量中?如果您在此处向我们展示了整个问题的上下文,我们可能会有更多选择。或者,您可以将原件附加为承诺者的财产。
  • 无论如何,您的代码都不应该依赖于函数签名甚至是代码中的参数名称。你到底在用它做什么?

标签: promise bluebird


【解决方案1】:

不,你可以解决它。

如果它是用promisifyAll 承诺的,你可以在没有Async 后缀的情况下访问它 - 否则,你必须自己做:

var promisified = Promise.promisify(cbFunction);
promisified.original = cbFunction;

// access as promisified.cbFunction from that point on.

否则,原始函数是通过闭包捕获的,您无法可靠地访问它。老实说,您可能不应该这样做,因为无论如何这都会干扰缩小。

【讨论】:

  • +1 可能不应该 :-)
  • 谢谢,所有这些手动方式对我来说都不起作用(我只有函数参考),我希望蓝鸟将原件保存在某个地方。当你说我不应该 - 仅仅是因为缩小吗?还是有其他原因也适用于后端?
  • @Madd0g 主要是缩小。如果您希望 bluebird 使用参考,请使用 promisifyAll。
猜你喜欢
  • 2014-07-05
  • 2016-07-27
  • 1970-01-01
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 2015-08-26
  • 2013-10-26
相关资源
最近更新 更多