You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@thrift.apache.org by "Bruno Fonseca (JIRA)" <ji...@apache.org> on 2016/12/20 13:18:58 UTC

[jira] [Created] (THRIFT-4010) Q.fcall messing up with *this* pointer inside called function

Bruno Fonseca created THRIFT-4010:
-------------------------------------

             Summary: Q.fcall messing up with *this* pointer inside called function
                 Key: THRIFT-4010
                 URL: https://issues.apache.org/jira/browse/THRIFT-4010
             Project: Thrift
          Issue Type: Bug
          Components: Node.js - Compiler
    Affects Versions: 0.9.3
            Reporter: Bruno Fonseca
             Fix For: 0.10.0


Example: I define a basic service

```
namespace js Auth

service AuthSrv {
    string signin(
        1:string email,
        2:string password
    )
}
```

And set up a Auth es6 class that gonna handle the requests like this:

```
module.exports = class AuthSrv {
    constructor() {
        this.db = .........
    }

    async signin(email, password) {
        try {
            let user = await this.db.findOne(....)
        }
        
        ....
    }
}
```

and instantiate a thrift server like this:

```
let server = thrift.createServer(AuthProcessor, new AuthSrv());
```

In this scenario, i'm getting that *this* pointer is **undefined** when signin function is called. Looking at thrift generated code for the processor i saw this line:

```
if (this._handler.signin.length === 2) {
    Q.fcall(this._handler.signin, args.email, args.password)
    .then(.....)
}
```

If i change the fcall to:

```
if (this._handler.signin.length === 2) {
    Q.fcall(this._handler.signin.bind(this._handler), args.email, args.password)
    .then(.....)
}
```

everything works like a charm and *this* pointer is correctly assinged inside signin function call.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)