无法将类调用为函数Javascript

时间:2018-05-29 19:33:24

标签: javascript

我正在构建一个简单的流,以便在PubNub上发布并稍后使用。我可以成功地使用单独的函数将输出记录到控制台,甚至可以使用.pipe(new function())创建.json文件。但是出于某种原因,这个函数让我无法调用类函数。我没有在代码末尾更改函数调用的语法,所以我假设它是PubNubStreamOut()函数本身的东西。

  

TypeError:无法将类作为函数调用       在_classCallCheck(D:\ pasco \ node_modules \ pubnub \ lib \ node \ index.js:27:99)       在_class(D:\ pasco \ node_modules \ pubnub \ lib \ node \ index.js:37:5)       在新的PubNubOutStream(D:\ pasco \ pubnub.js:24:13)       在对象。 (d:\帕斯科\ pubnub.js:54:42)       在Module._compile(module.js:635:30)       at Object.Module._extensions..js(module.js:646:10)       在Module.load(module.js:554:32)       在tryModuleLoad(module.js:497:12)       在Function.Module._load(module.js:489:3)       在Function.Module.runMain(module.js:676:10)

.js文件如下:

var pubnub = require('pubnub');
var util = require('util');
var Readable = require('stream').Readable;
var Writable = require('stream').Writable;
var Twitter = require('twitter');

var pncfg = {
   ssl           : true,  //  enable TLS Tunneling over TCP
   publish_key   : "PUB_KEY",
   subscribe_key : "SUB_KEY"
};

var twcfg = {
    consumer_key:"...",
    consumer_secret:"...",
    access_token_key:"...",
    access_token_secret:"..."
}



function PubNubOutStream(cfg, channel) {
   Writable.call(this,{objectMode:true});
   var pn = pubnub(cfg);

   this._write = function(obj, encoding, callback) {
       pn.publish({
           channel: channel,
           message: obj,
           callback: () => callback()
       });
   };
}
util.inherits(PubNubOutStream, Writable);

function TwitterStream(cfg, query) {
    Readable.call(this,{objectMode:true});

    var client = new Twitter(cfg);

    this._read = function() { /* do nothing */ };
    var self = this;
    function connect() {
        client.stream('statuses/filter', {track: query},
            function(stream) {
               stream.on('data', (tweet) => self.push(tweet));
               stream.on('error', (error) => connect());
            });
    }
    connect();
 }
 util.inherits(TwitterStream, Readable);

new TwitterStream(twcfg,"#twitter").pipe(new PubNubOutStream(pncfg,"awesome-tweets"));

由于我使用new PubNubOutStream()

,我不确定为什么我将该类作为函数错误

1 个答案:

答案 0 :(得分:1)

根据PubNub的documentation,你应该使用以下语法来创建一个新实例:

var PubNub = require('pubnub');
var pn = new PubNub({
    publishKey : 'demo',
    subscribeKey : 'demo'
});

错误是由于您将PubNub构造函数作为函数调用的事实:

var pn = pubnub(cfg);

错误消息确认:

  

TypeError:无法在_classCallCheck

中将类作为函数调用

希望这会让你回到正轨。