Skip to content

Commit 1a32ba2

Browse files
committed
fix: improved unsubscribe
1 parent 4d91c35 commit 1a32ba2

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

packages/app-backend-core/src/util/subscriptions.ts

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,30 @@ function getSubs (type: string) {
1515
}
1616

1717
export function subscribe (type: string, payload: any) {
18-
const rawPayload = JSON.stringify(payload)
18+
const rawPayload = getRawPayload(payload)
1919
getSubs(type).push({
2020
payload,
2121
rawPayload,
2222
})
2323
}
2424

2525
export function unsubscribe (type: string, payload: any) {
26-
const rawPayload = JSON.stringify(payload)
26+
const rawPayload = getRawPayload(payload)
2727
const subs = getSubs(type)
28-
const index = subs.findIndex(sub => sub.rawPayload === rawPayload)
29-
if (index !== -1) {
28+
let index: number
29+
while ((index = subs.findIndex(sub => sub.rawPayload === rawPayload)) !== -1) {
3030
subs.splice(index, 1)
3131
}
3232
}
3333

34+
function getRawPayload (payload: any) {
35+
const data = Object.keys(payload).sort().reduce((acc, key) => {
36+
acc[key] = payload[key]
37+
return acc
38+
}, {})
39+
return JSON.stringify(data)
40+
}
41+
3442
export function isSubscribed (
3543
type: string,
3644
predicate: (sub: Subscription) => boolean = () => true,

0 commit comments

Comments
 (0)