UNPKG

@gdjiami/hooks

Version:

react hooks for mygzb.com

82 lines (81 loc) 3.39 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = require("react"); var useRefProps_1 = tslib_1.__importDefault(require("./useRefProps")); var useRefState_1 = tslib_1.__importDefault(require("./useRefState")); var utils_1 = require("./utils"); function usePromise(action, option) { var _this = this; if (option === void 0) { option = { skipOnLoading: true }; } var actionRef = useRefProps_1.default(action); var optionRef = useRefProps_1.default(option); var currentTaskId = react_1.useRef(0); var _a = tslib_1.__read(useRefState_1.default(false), 3), loading = _a[0], setLoading = _a[1], loadingRef = _a[2]; var _b = tslib_1.__read(react_1.useState(), 2), value = _b[0], setValue = _b[1]; var _c = tslib_1.__read(react_1.useState(), 2), error = _c[0], setError = _c[1]; var caller = react_1.useCallback(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return tslib_1.__awaiter(_this, void 0, void 0, function () { var taskId, shouldStop, res, err_1; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: if (loadingRef.current && optionRef.current.skipOnLoading) { return [2 /*return*/]; } taskId = utils_1.getUid(); currentTaskId.current = taskId; shouldStop = function () { return taskId !== currentTaskId.current; }; _a.label = 1; case 1: _a.trys.push([1, 3, 4, 5]); setLoading(true); setError(undefined); return [4 /*yield*/, actionRef.current.apply(actionRef, tslib_1.__spread(args))]; case 2: res = _a.sent(); if (shouldStop()) { return [2 /*return*/]; } setValue(res); return [2 /*return*/, res]; case 3: err_1 = _a.sent(); if (shouldStop()) { return [2 /*return*/]; } setError(err_1); throw err_1; case 4: if (shouldStop()) { return [2 /*return*/]; } setLoading(false); return [7 /*endfinally*/]; case 5: return [2 /*return*/]; } }); }); }, []); var reset = react_1.useCallback(function () { currentTaskId.current = -1; setLoading(false); setValue(undefined); setError(undefined); }, []); return { loading: loading, error: error, call: caller, value: value, setValue: setValue, reset: reset, setError: setError, setLoading: setLoading, }; } exports.default = usePromise;