UNPKG

794 BJavaScriptView Raw
1import * as React from 'react';
2export default function useThenable(create) {
3 const [promise] = React.useState(create);
4 let initialState = [false, undefined]; // Check if our thenable is synchronous
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//# sourceMappingURL=useThenable.js.map
\No newline at end of file