mirror of
https://github.com/hcengineering/platform.git
synced 2024-12-22 11:01:54 +03:00
UBER-331: Fix live query update (#3305)
Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
parent
d21cae9f32
commit
dbb08b7465
@ -175,13 +175,15 @@ export class LiveQuery {
|
||||
if (!this.needUpdate(_class, query, callback, options) && !this.clientRecreated) {
|
||||
return false
|
||||
}
|
||||
// We need to prevent callback with old values to be happening
|
||||
// One time refresh in case of client recreation
|
||||
this.clientRecreated = false
|
||||
void this.doQuery<T>(_class, query, callback, options)
|
||||
void this.doQuery<T>(++this.reqId, _class, query, callback, options)
|
||||
return true
|
||||
}
|
||||
|
||||
private async doQuery<T extends Doc>(
|
||||
id: number,
|
||||
_class: Ref<Class<T>>,
|
||||
query: DocumentQuery<T>,
|
||||
callback: (result: FindResult<T>) => void,
|
||||
@ -196,7 +198,6 @@ export class LiveQuery {
|
||||
|
||||
return
|
||||
}
|
||||
const id = ++this.reqId
|
||||
const piplineQuery = await pipeline.subscribe(_class, query, options, () => {
|
||||
// Refresh query if pipeline decide it is required.
|
||||
this.refreshClient()
|
||||
@ -213,7 +214,17 @@ export class LiveQuery {
|
||||
this.oldOptions = options
|
||||
this.oldQuery = query
|
||||
|
||||
const unsub = liveQuery.query(_class, piplineQuery.query ?? query, callback, piplineQuery.options ?? options)
|
||||
const unsub = liveQuery.query(
|
||||
_class,
|
||||
piplineQuery.query ?? query,
|
||||
(result) => {
|
||||
// If we have one more request after this one, no need to do something.
|
||||
if (id === this.reqId) {
|
||||
callback(result)
|
||||
}
|
||||
},
|
||||
piplineQuery.options ?? options
|
||||
)
|
||||
this.unsubscribe = () => {
|
||||
unsub()
|
||||
piplineQuery.unsubscribe()
|
||||
@ -232,7 +243,7 @@ export class LiveQuery {
|
||||
const query = this.oldQuery
|
||||
const callback = this.oldCallback
|
||||
const options = this.oldOptions
|
||||
void this.doQuery(_class, query, callback, options)
|
||||
void this.doQuery(++this.reqId, _class, query, callback, options)
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user