usePromiseReadyFn
Zzongke 12/2/2023 Hooks
# usePromiseReadyFn
等待数据请求完再接受数据
const sleepFn = (sleep:number):Promise<number[]> => {
return new Promise(resolve => {
setTimeout(()=>{
resolve([1,2,3])
},sleep)
})
}
const usePromiseReadyFn = () =>{
let resolveResolve = null;
const promiseResolveFn = new Promise(resolve => {
resolveResolve = resolve;
})
const promiseReadyFn = (cb:()=>void) =>{
promiseResolveFn.then(()=>{
cb();
})
}
return {
promiseResolveFn,
promiseReadyFn
}
}
// Demo
const {promiseResolveFn,promiseReadyFn} = usePromiseReadyFn;
export const onReadyFn = promiseReadyFn;
const request = async() =>{
await Promise.all([sleepFn(1000),sleepFn(3000),sleepFn(2000)])
promiseResolveFn();
}
// 其它地方需要用到上面执行完之后才执行获取到的数据
import {onReadyFn} from "*";
onReadyFn(()=>{
console.log("Ready")
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44