Chcę użyć metody JavaScript .apply do funkcji kompilacji skompilowanej dla Node.js. Plik .js Thrift ma kod tak:.apply bez zmiany zakresu
...
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();
};
...
Mój plik server wygląda w następujący sposób:
var thrift = require('thrift')
, nimbus = require('./Nimbus')
, connection = thrift.createConnection('127.0.0.1', 6627)
, client = thrift.createClient(nimbus, connection)
, ... // server initiation etc
app.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]
});
...
Bezpośrednie połączenia [1] zwraca wartości zgodnie z oczekiwaniami, ale wywołanie zastosowania [2 ] zawsze produkuje następujący błąd w wierszu [0]:
TypeError: Cannot set property 'NaN' of undefined
próbowałem kilka parametrów inny zakres w [2]: null
, nimbus
, nimbus.Client
, nimbus.Client.prototype
, i client[req.params.command]
, wszystkie bez powodzenia.
Jak wywołać metodę apply bez zmiany rzeczywistego zakresu wywoływanej funkcji, aby zachowywała się dokładnie tak samo, jak w przypadku bezpośredniego wywoływania?
spróbować foo.apply (null, ...) –
foo.apply (null, ...) produkuje ten sam błąd – Thomas
Jestem trochę ciekaw, dlaczego chcesz używać 'apply' metodę w pierwszym miejsce, jeśli chcesz zachować domyślny zakres ... – subhaze