UNPKG

@hanxx/vue-hooks

Version:
64 lines (63 loc) 1.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var composition_api_1 = require("@vue/composition-api"); function useAsync(fn, options) { // initial state var defaultOptions = options || {}; var manual = defaultOptions.manual, onError = defaultOptions.onError, onSuccess = defaultOptions.onSuccess, _a = defaultOptions.params, params = _a === void 0 ? [] : _a; var initialData = defaultOptions.initialData || {}; var loading = composition_api_1.ref(!manual); var error = composition_api_1.ref(null); var data = composition_api_1.ref(initialData); // execute async function function run() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } loading.value = true; return fn.apply(void 0, args).then(function (resp) { if (resp) { data.value = resp; return resp; } return initialData; }) .then(function (returns) { if (typeof onSuccess === 'function') { onSuccess(returns, params); } }) .catch(function (err) { error.value = err; if (typeof onError === 'function') { onError(err, params); } }) .finally(function () { loading.value = false; }); } function start() { var args = []; for (var _i = 0; _i < arguments.length; _i++) { args[_i] = arguments[_i]; } if (manual) { return run.apply(void 0, args); } return Promise.resolve(initialData); } composition_api_1.onMounted(function () { if (!manual) { run.apply(void 0, params); } }); return { loading: loading, error: error, resp: data, run: start, }; } exports.default = useAsync;