@@ -131,12 +131,11 @@ export default class SupabaseClient {
131
131
}
132
132
133
133
/**
134
- * Remove all active subscriptions.
134
+ * Remove all subscriptions.
135
135
*/
136
- removeAllSubscriptions ( ) {
137
- this . realtime . channels . forEach ( ( sub ) => {
138
- this . removeSubscription ( sub )
139
- } )
136
+ async removeAllSubscriptions ( ) {
137
+ const subscriptions = this . realtime . channels . slice ( )
138
+ return await Promise . allSettled ( subscriptions . map ( ( sub ) => this . removeSubscription ( sub ) ) )
140
139
}
141
140
142
141
/**
@@ -149,12 +148,14 @@ export default class SupabaseClient {
149
148
try {
150
149
await this . _closeSubscription ( subscription )
151
150
152
- const openSubscriptions = this . getSubscriptions ( ) . length
153
- if ( ! openSubscriptions ) {
151
+ const allSubscriptions = this . getSubscriptions ( )
152
+ const openSubscriptionsCount = allSubscriptions . filter ( ( chan ) => chan . isJoined ( ) ) . length
153
+
154
+ if ( ! allSubscriptions . length ) {
154
155
const { error } = await this . realtime . disconnect ( )
155
156
if ( error ) return resolve ( { error } )
156
157
}
157
- return resolve ( { error : null , data : { openSubscriptions } } )
158
+ return resolve ( { error : null , data : { openSubscriptions : openSubscriptionsCount } } )
158
159
} catch ( error ) {
159
160
return resolve ( { error } )
160
161
}
@@ -165,6 +166,11 @@ export default class SupabaseClient {
165
166
if ( ! subscription . isClosed ( ) ) {
166
167
await this . _closeChannel ( subscription )
167
168
}
169
+
170
+ return new Promise ( ( resolve ) => {
171
+ this . realtime . remove ( subscription )
172
+ return resolve ( true )
173
+ } )
168
174
}
169
175
170
176
/**
@@ -225,7 +231,6 @@ export default class SupabaseClient {
225
231
subscription
226
232
. unsubscribe ( )
227
233
. receive ( 'ok' , ( ) => {
228
- this . realtime . remove ( subscription )
229
234
return resolve ( true )
230
235
} )
231
236
. receive ( 'error' , ( e : Error ) => reject ( e ) )
0 commit comments