【问题标题】:Bluebird promisifyAll doesn't work in a vanilla caseBluebird promisifyAll 在香草盒中不起作用
【发布时间】:2015-09-18 01:25:55
【问题描述】:

我正在尝试使用 Pusher.js 函数,但我有点困惑为什么最后一种技术有效而前两种无效,因为前两种似乎遵循文档示例。

我得到的错误是:未定义 triggerAsync。

样本

var Pusher = require('pusher');
var pusher = new Pusher(params);

Promise.promisifyAll(Pusher); //this doesn't work for some reason
var triggerAsync = Promise.promisify(pusher.trigger); //this also doesn't work

Promise.promisifyAll(Object.getPrototypeOf(pusher));  //this works

【问题讨论】:

    标签: javascript promise bluebird


    【解决方案1】:

    ...因为前两个似乎遵循文档示例。

    最后一个也是!如果我们查看documentation for Promise#promisifyAll over at bluebirdjs.com(在文档底部),您会发现这一点,它简要解释了为什么需要采用这种行为:

    在上述所有情况下,库都以一种或另一种方式提供其类。如果不是这种情况,您仍然可以通过创建一次性实例来承诺:

    var ParanoidLib = require("...");
    var throwAwayInstance = ParanoidLib.createInstance();
    Promise.promisifyAll(Object.getPrototypeOf(throwAwayInstance));
    // Like before, from this point on, all new instances + even the throwAwayInstance suddenly support promises
    

    因此,尽管它没有给我们一个明确的答案来解释为什么我们需要使用 Pusher 来做这件事,但我们至少可以确定这是因为它没有 "[make] 它的类在一个中可用方式或其他方式”。你也可以放心,你不一定做错了(你不应该使用这种方法,除非你必须这样做)。

    【讨论】:

    猜你喜欢
    • 2021-11-29
    • 1970-01-01
    • 2015-12-03
    • 1970-01-01
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    相关资源
    最近更新 更多