usePromiseReadyFn

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
Last Updated: 12/2/2023, 1:01:38 PM