taro-hooks
Version:
为 Taro 而设计的 Hooks Library
53 lines (52 loc) • 2.26 kB
JavaScript
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
Object.defineProperty(exports, "__esModule", {
value: true
});
// private usePromise. do not use in outside
var core_1 = require("@taro-hooks/core");
var shared_1 = require("@taro-hooks/shared");
var tool_1 = require("../utils/tool");
// may some method will init be undefined, use effect to watch recacu! emmm~ vue static in after!
function useActivePromise(implementMethod, context) {
var generator = function generator(context) {
return function (options) {
var _ref;
var execMethod = (_ref = (0, shared_1.escapeState)(context)) == null ? void 0 : _ref[implementMethod];
if (!execMethod) return Promise.reject((0, tool_1.generateGeneralFail)(implementMethod, 'please input a valid method name'));
// @ts-ignore
var methodName = implementMethod != null ? implementMethod : 'usePromise::implementMethod';
return new Promise(function (resolve, reject) {
try {
if ((0, shared_1.isFunction)(execMethod)) {
var _execMethod;
var payload = options || {};
(_execMethod = execMethod(_extends({}, payload, {
success: resolve,
fail: reject
}))) == null ? void 0 : _execMethod["catch"] == null ? void 0 : _execMethod["catch"](reject);
} else {
throw new TypeError("[" + methodName + "] not vaild for Taro");
}
} catch (e) {
reject((0, tool_1.generateGeneralFail)(methodName, e.message));
}
});
};
};
var _ref2 = (0, core_1.useState)(function () {
return generator(context);
}),
exector = _ref2[0],
setExector = _ref2[1];
var promiseLike = (0, core_1.useRef)(generator(context));
(0, core_1.useEffect)(function () {
if (context && shared_1.ISREACT) {
setExector(function () {
return generator(context);
});
}
}, [context]);
return shared_1.ISVUE ? promiseLike.current : exector;
}
exports["default"] = useActivePromise;
;