UNPKG

@td-design/rn-hooks

Version:

从ahooks里面抽取的一些在rn项目里可以使用的hooks。提高开发效率

44 lines (41 loc) 1.66 kB
import { __awaiter, __generator, __spreadArray, __read } from '../_virtual/_tslib.js'; import { useRef, useCallback } from 'react'; /** * 用于给一个异步函数增加竞态锁,防止并发执行。 * 可以用在诸如表单提交的场景下,保证即便多次点击提交,在前一次结果未完成之前,后续操作会被忽略 */ function useLockFn(fn) { var _this = this; var lockRef = useRef(false); return useCallback(function () { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } return __awaiter(_this, void 0, void 0, function () { var result, error_1; return __generator(this, function (_a) { switch (_a.label) { case 0: if (lockRef.current) return [2 /*return*/]; lockRef.current = true; _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4 /*yield*/, fn.apply(void 0, __spreadArray([], __read(args), false))]; case 2: result = _a.sent(); lockRef.current = false; return [2 /*return*/, result]; case 3: error_1 = _a.sent(); lockRef.current = false; throw error_1; case 4: return [2 /*return*/]; } }); }); }, [fn]); } export { useLockFn as default };