43 lines
1.3 KiB
TypeScript
43 lines
1.3 KiB
TypeScript
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
|
|
})
|
|
})
|