我正在尝试宣传一个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
答案 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]它的类在一个方式或其他“。您也可以放心,您不一定做错了(除非必须,否则不应使用此方法)。