Skip to content

Commit 5dbe65e

Browse files
committed
fix(wifi): ensure no result propagation after stream unsubscription
1 parent 432884d commit 5dbe65e

File tree

1 file changed

+9
-6
lines changed

1 file changed

+9
-6
lines changed

src/internal/wifi/provider.ts

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,13 @@ export class WifiScanProvider {
4646
try {
4747
for (let i = 0; i < grouping; i++) {
4848
const result = await this.adapter.acquireWifiFingerprint(true);
49-
subscriber.next(result);
50-
if (i !== grouping - 1) {
51-
await new Promise((resolve) =>
52-
setTimeout(resolve, MIN_SCAN_INTERVAL)
53-
);
54-
}
5549
if (unsubscribed) break;
50+
subscriber.next(result);
51+
52+
if (i === grouping - 1) break;
53+
await new Promise((resolve) =>
54+
setTimeout(resolve, MIN_SCAN_INTERVAL)
55+
);
5656
}
5757
} catch (err) {
5858
if (continueOnFailure) {
@@ -80,9 +80,11 @@ export class WifiScanProvider {
8080
continueOnFailure: boolean
8181
): Observable<WifiFingerprint> {
8282
return new Observable<WifiFingerprint>((subscriber) => {
83+
let unsubscribed = false;
8384
const performScan = async () => {
8485
try {
8586
const result = await this.adapter.acquireWifiFingerprint(false);
87+
if (unsubscribed) return;
8688
subscriber.next(result);
8789
} catch (err) {
8890
if (continueOnFailure) {
@@ -99,6 +101,7 @@ export class WifiScanProvider {
99101
}, interval);
100102

101103
return () => {
104+
unsubscribed = true;
102105
clearInterval(intervalId);
103106
};
104107
});

0 commit comments

Comments
 (0)