1 | import * as React from 'react';
|
2 | export default function useThenable(create) {
|
3 | const [promise] = React.useState(create);
|
4 | let initialState = [false, undefined];
|
5 |
|
6 | promise.then(result => {
|
7 | initialState = [true, result];
|
8 | });
|
9 | const [state, setState] = React.useState(initialState);
|
10 | const [resolved] = state;
|
11 | React.useEffect(() => {
|
12 | let cancelled = false;
|
13 |
|
14 | const resolve = async () => {
|
15 | let result;
|
16 |
|
17 | try {
|
18 | result = await promise;
|
19 | } finally {
|
20 | if (!cancelled) {
|
21 | setState([true, result]);
|
22 | }
|
23 | }
|
24 | };
|
25 |
|
26 | if (!resolved) {
|
27 | resolve();
|
28 | }
|
29 |
|
30 | return () => {
|
31 | cancelled = true;
|
32 | };
|
33 | }, [promise, resolved]);
|
34 | return state;
|
35 | }
|
36 |
|
\ | No newline at end of file |