memgraph/tests/manual/js/transaction_timeout/explicit-transaction.ts

43 lines
1.3 KiB
TypeScript
Raw Normal View History

import { Driver, Session } from "neo4j-driver";
import { EMPTY } from "rxjs"
import { catchError, finalize, map, mergeMap, concatWith } from "rxjs/operators"
const neo4j = require("neo4j-driver");
const driver: Driver = neo4j.driver("bolt://localhost:7687");
async function setup() {
const session: Session = driver.session();
try {
await session.run('MATCH (n) DETACH DELETE n');
await session.run('UNWIND RANGE(1, 100) AS x CREATE ()');
} finally {
session.close();
}
}
setup().then(() => {
const rxSession = driver.rxSession({ defaultAccessMode: 'READ' });
rxSession
.beginTransaction({ timeout: 50 }) // NOTE: a short timeout
.pipe(
mergeMap(tx =>
tx
.run('MATCH (),(),(),() RETURN 42 AS thing;') // NOTE: a long query
.records()
.pipe(
catchError(err => { tx.rollback(); throw err; }),
concatWith(EMPTY.pipe(finalize(() => tx.commit())))
)
),
finalize(() => { rxSession.close(); driver.close() })
)
.subscribe({
next: record => { },
complete: () => { console.info('complete'); process.exit(1); }, // UNEXPECTED
error: msg => console.error('Error:', msg.message), // NOTE: expected to error with server side timeout
})
})