[
https://issues.apache.org/jira/browse/THRIFT-4403?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16276885#comment-16276885
]
ASF GitHub Bot commented on THRIFT-4403:
----------------------------------------
Github user bananer commented on a diff in the pull request:
https://github.com/apache/thrift/pull/1437#discussion_r154668539
--- Diff: lib/js/src/thrift.js ---
@@ -599,8 +599,8 @@ Thrift.TWebSocketTransport.prototype = {
//If the user made calls before the connection was fully
//open, send them now
this.send_pending.forEach(function(elem) {
- this.socket.send(elem.buf);
- this.callbacks.push((function() {
+ self.socket.send(elem.buf);
--- End diff --
In short, `this` inside of a `function()` in JavaScript is not transferred
reliably from outer scopes. Try setting a breakpoint at this line and you will
see that `self` and `this` are different things here.
It's a bit of a race condition to have this block actually execute, but
calling a service method right after opening the transport crashed here
repeatedly in firefox.
Long version:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/this
> thrift.js: Incorrect usage of 'this' in TWebSocketTransport.__onOpen
> --------------------------------------------------------------------
>
> Key: THRIFT-4403
> URL: https://issues.apache.org/jira/browse/THRIFT-4403
> Project: Thrift
> Issue Type: Bug
> Components: JavaScript - Library
> Reporter: Philip Frank
>
> Inside the forEach callback 'this' will be the global object, not the
> transport object, as the implementation seems to assume.
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)