Nonblocking asynchronous JS services
------------------------------------

                 Key: THRIFT-1087
                 URL: https://issues.apache.org/jira/browse/THRIFT-1087
             Project: Thrift
          Issue Type: New Feature
          Components: JavaScript - Compiler, JavaScript - Library
    Affects Versions: 0.6
            Reporter: Henrique Mendonca
            Assignee: Henrique Mendonca



The current js lib uses an ajax synchronous request, which is not very typical 
for javascript. Since the current browsers' js are still single threaded, they 
block the whole website until we get an answer from the server.

Current trunk:
{quote}
MyServiceClient.prototype.getMyObject = function (objectId) \{
  this.send_getMyObject(objectId)   //send request and wait for response
  return this.recv_getMyObject()      //interpret response
}
{quote}


I propose something like this: (pseudo-code + extra verbose for better 
understanding)
{quote}
MyServiceClient.prototype.getMyObject = function (objectId, onSuccessHandler) \{
  if ( ! onSucessHandler) \{
    this.send_getMyObject(objectId)   //send request and wait for response
    return this.recv_getMyObject()      //interpret response
  } else \{
    Thrift.HttpRequest.post( send_getMyObject(objectId) );   //send request 
asynchronously
    Thrift.HttpRequest.onreadystatechange = function () \{ onSuccessHandler( 
this.recv_getMyObject() ); } //call handler on success
    return Thrift.HttpRequest   //return request object, as user might need to 
attach an onError handler
  }
}
{quote}

I think it should be something similar to the jQuery post: 
http://api.jquery.com/jQuery.post/
and it will still keep the compatibility with legacy code.

Any thoughts or ideas?


--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to