蓝鸟promisifyAll不适用于香草案件

时间:2015-09-17 16:07:46

标签: javascript promise bluebird

我正在尝试宣传一个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

1 个答案:

答案 0 :(得分:2)

  

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

最后一次!如果我们看一下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]它的类在一个方式或其他“。您也可以放心,您不一定做错了(除非必须,否则不应使用此方法)。