Created
August 8, 2018 07:04
-
-
Save wkrueger/23314f5ad5a85715f70394785220d299 to your computer and use it in GitHub Desktop.
paginatedquery
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
type Result = { rows: any[]; nextPage?: () => void } | |
class PaginatedQuery { | |
constructor(public query: string, public params: any[] = []) {} | |
private ctx = getContext() | |
private fetchSize = 10 | |
private nextPromise = new Promise<Result>((resolve, reject) => { | |
this.nextResolve = resolve | |
this.nextReject = reject | |
}) | |
private nextResolve!: Function | |
private nextReject!: Function | |
async init() { | |
const client = await this.ctx.cassandra.getClient() | |
let that = this | |
client.eachRow( | |
this.query, | |
this.params, | |
{ fetchSize: this.fetchSize }, | |
function eachRow(/*n, row*/) {}, | |
function eachPage(err: any, result: Result) { | |
if (err) return that.nextReject(err) | |
that.nextResolve(result) | |
} | |
) | |
} | |
async readNext(): Promise<Result | undefined> { | |
if (!this.nextPromise) return undefined | |
let result = await this.nextPromise | |
if (result.nextPage) { | |
this.nextPromise = new Promise((resolve, reject) => { | |
this.nextResolve = resolve | |
this.nextReject = reject | |
}) | |
result.nextPage() | |
} else { | |
this.nextPromise = undefined as any | |
this.nextResolve = undefined as any | |
} | |
return result | |
} | |
} | |
const resultsCache = new Map<string, PaginatedQuery>() | |
// if (queryId) { | |
// const found = resultsCache.get(queryId) | |
// if (found) return found.readNext() | |
// throw Error("queryId expired or not found.") | |
// } | |
// const query = new PaginatedQuery("") | |
// await query.init() | |
// const newQueryId = v4() | |
// resultsCache.set(newQueryId, query) | |
// setTimeout(() => { | |
// resultsCache.delete(newQueryId) | |
// }, 30000) | |
// return query.readNext() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment