Quantcast
Channel: User Thomas - Stack Overflow
Viewing all articles
Browse latest Browse all 39

.apply without changing scope

$
0
0

I want to use the JavaScript .apply method to functions of a thrift compiled for Node.js. The thrift .js file has code like this:

...var NimbusClient = exports.Client = function(output, pClass) {    this.output = output;    this.pClass = pClass;    this.seqid = 0;    this._reqs = {};};NimbusClient.prototype = {};NimbusClient.prototype.getClusterInfo = function(callback) {    this.seqid += 1; // line where error is thrown [0]    this._reqs[this.seqid] = callback;    this.send_getClusterInfo();};...

My server file looks the following way:

var thrift = require('thrift')    , nimbus = require('./Nimbus')    , connection = thrift.createConnection('127.0.0.1', 6627)    , client = thrift.createClient(nimbus, connection)    , ... // server initiation etcapp.get('/nimbus/:command', function(req, res, next) {    client[req.params.command](console.log); // direct call [1]    client[req.params.command].apply(this, [console.log]); // apply call [2]});...

The direct call [1] returns the values as expected, but the apply call [2] always produces the following error in line [0]:

TypeError: Cannot set property 'NaN' of undefined

I tried several other scope parameters in [2]: null, nimbus, nimbus.Client, nimbus.Client.prototype, nimbus.Client.prototype[req.params.command] and client[req.params.command], all without success.

How can I call the apply method without changing the actual scope of the function called, so that it behaves exactly the same as it would if called in the direct way?


Viewing all articles
Browse latest Browse all 39

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>