JavaScript报错:Cannot call class as a function 问题求助
解决 "Cannot call a class as function" 错误——PubNubOutStream 问题
我一眼就揪出问题所在啦!你在 PubNubOutStream 里初始化 PubNub 实例的时候犯了个小疏漏:pubnub 是类构造函数,必须用 new 关键字来实例化,不能直接像普通函数那样调用。
问题根源
看你这段代码:
var pn = pubnub(cfg);
当前的 PubNub Node.js SDK 中,pubnub 是一个类,直接调用它会触发你看到的 TypeError: Cannot call a class as function 错误——类必须通过 new 关键字才能创建实例。
修复方案
把上面那行代码改成:
var pn = new pubnub(cfg);
修改后的完整 PubNubOutStream 函数
function PubNubOutStream(cfg, channel) { Writable.call(this,{objectMode:true}); // 关键修复:添加 new 关键字初始化 PubNub 实例 var pn = new pubnub(cfg); this._write = function(obj, encoding, callback) { pn.publish({ channel: channel, message: obj, callback: () => callback() }); }; } util.inherits(PubNubOutStream, Writable);
额外小提醒
你还可以把 _write 改成箭头函数,这样能避免潜在的 this 指向问题,不过当前写法也能正常工作。另外记得确认你的 PubNub 密钥配置正确,避免后续出现权限相关的报错。
这样修改后,你的流处理程序应该就能正常把 Twitter 数据流推送到 PubNub 频道啦!
内容的提问来源于stack exchange,提问作者William Howell
相关产品推荐
相关产品推荐

