@@ -22,6 +22,7 @@ import StreamObserver from '../stream-observer';
2222import Result from '../../result' ;
2323import { EMPTY_CONNECTION_HOLDER } from '../connection-holder' ;
2424import HttpDataConverter from './http-data-converter' ;
25+ import { Neo4jError } from '../../error' ;
2526
2627export default class HttpStatementRunner {
2728
@@ -30,13 +31,21 @@ export default class HttpStatementRunner {
3031 this . _transactionCommitUrl = createTransactionCommitUrl ( url ) ;
3132 this . _headers = createHttpHeaders ( authToken ) ;
3233 this . _converter = new HttpDataConverter ( ) ;
34+ this . _activeXhrRequests = [ ] ;
3335 }
3436
3537 run ( statement , parameters ) {
3638 const streamObserver = new StreamObserver ( ) ;
37- sendPostRequest ( statement , parameters , streamObserver , this . _transactionCommitUrl , this . _headers , this . _converter ) ;
39+ sendPostRequest ( statement , parameters , streamObserver , this ) ;
3840 return new Result ( streamObserver , statement , parameters , this . _serverInfoSupplier , EMPTY_CONNECTION_HOLDER ) ;
3941 }
42+
43+ terminateActiveRequests ( ) {
44+ while ( this . _activeXhrRequests . length > 0 ) {
45+ const activeXhrRequest = this . _activeXhrRequests . pop ( ) ;
46+ activeXhrRequest . abort ( ) ;
47+ }
48+ }
4049}
4150
4251function createServerInfoSupplier ( url ) {
@@ -58,16 +67,22 @@ function createHttpHeaders(authToken) {
5867 } ;
5968}
6069
61- function sendPostRequest ( statement , parameters , streamObserver , transactionCommitUrl , headers , converter ) {
70+ function sendPostRequest ( statement , parameters , streamObserver , statementRunner ) {
6271 try {
63- xhr . post (
64- transactionCommitUrl ,
72+ const xhrRequest = xhr . post (
73+ statementRunner . _transactionCommitUrl ,
6574 {
66- headers : headers ,
67- body : createStatementJson ( statement , parameters , converter )
75+ headers : statementRunner . _headers ,
76+ body : createStatementJson ( statement , parameters , statementRunner . _converter )
6877 } ,
69- ( error , response ) => processPostResponse ( error , response , converter , streamObserver )
78+ ( error , response ) => processPostResponse ( error , response , statementRunner . _converter , streamObserver )
7079 ) ;
80+
81+ xhrRequest . addEventListener ( 'abort' , ( ) => {
82+ streamObserver . onError ( new Neo4jError ( 'Query terminated because session has been closed' ) ) ;
83+ } , false ) ;
84+
85+ statementRunner . _activeXhrRequests . push ( xhrRequest ) ;
7186 } catch ( e ) {
7287 streamObserver . onError ( e ) ;
7388 }
0 commit comments