Skip to content

Commit 33a1fa1

Browse files
authored
fix: 修复多个请求轮询时,设置了窗口不可见停止轮询,离开窗口再回 来,多个轮询请求只剩下一个请求继续轮询的问题(当前问题已在ahooks中修改一版并合入主分支 链接:alibaba/hooks#2688) (#280)
1 parent fb48696 commit 33a1fa1

File tree

2 files changed

+18
-21
lines changed

2 files changed

+18
-21
lines changed

packages/use-request/src/utils/subscribeFocus.ts

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,28 +6,25 @@ import isOnline from './isOnline'
66

77
type Listener = () => void
88

9-
const listeners: Listener[] = []
9+
const listeners = new Set<Listener>();
1010

1111
function subscribe(listener: Listener) {
12-
listeners.push(listener)
12+
listeners.add(listener);
13+
1314
return function unsubscribe() {
14-
const index = listeners.indexOf(listener)
15-
if (index > -1) {
16-
listeners.splice(index, 1)
17-
}
18-
}
15+
listeners.has(listener) && listeners.delete(listener);
16+
};
1917
}
2018

2119
if (isBrowser) {
2220
const revalidate = () => {
2321
if (!isDocumentVisible() || !isOnline()) return
24-
for (let i = 0; i < listeners.length; i++) {
25-
const listener = listeners[i]
26-
listener()
27-
}
22+
listeners.forEach(listener => {
23+
listener();
24+
})
2825
}
29-
window.addEventListener('visibilitychange', revalidate, false)
30-
window.addEventListener('focus', revalidate, false)
26+
window.addEventListener('visibilitychange', revalidate, false);
27+
window.addEventListener('focus', revalidate, false);
3128
}
3229

3330
export default subscribe

packages/use-request/src/utils/subscribeReVisible.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
import isDocumentVisible from "./isDocumentVisible";
22
import { canUseDom } from "./utils";
33

4-
const listeners: any[] = [];
4+
type Listener = () => void;
55

6-
function subscribe(listener: () => void) {
7-
listeners.push(listener);
6+
const listeners = new Set<Listener>();
7+
8+
function subscribe(listener: Listener) {
9+
listeners.add(listener);
810
return function unsubscribe() {
9-
const index = listeners.indexOf(listener);
10-
listeners.splice(index, 1);
11+
listeners.has(listener) && listeners.delete(listener);
1112
};
1213
}
1314

1415
if (canUseDom()) {
1516
const revalidate = () => {
1617
if (!isDocumentVisible()) return;
17-
for (let i = 0; i < listeners.length; i++) {
18-
const listener = listeners[i];
18+
listeners.forEach(listener => {
1919
listener();
20-
}
20+
});
2121
};
2222
window.addEventListener("visibilitychange", revalidate, false);
2323
}

0 commit comments

Comments
 (0)