ahooks
Version:
react hooks library
37 lines (36 loc) • 1.06 kB
JavaScript
import { __awaiter } from "tslib";
import { useEffect } from 'react';
import { isFunction } from '../utils';
function isAsyncGenerator(val) {
return isFunction(val[Symbol.asyncIterator]);
}
function useAsyncEffect(effect, deps) {
useEffect(() => {
const e = effect();
if (typeof e === 'function') {
return e;
}
const asyncEffect = e;
let cancelled = false;
function execute() {
return __awaiter(this, void 0, void 0, function* () {
if (isAsyncGenerator(asyncEffect)) {
while (true) {
const result = yield asyncEffect.next();
if (result.done || cancelled) {
break;
}
}
}
else {
yield asyncEffect;
}
});
}
execute();
return () => {
cancelled = true;
};
}, deps);
}
export default useAsyncEffect;