UNPKG

@cloudcome/utils-vue

Version:
66 lines (65 loc) 1.59 kB
"use strict"; Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); const vue = require("vue"); function useAsync(fn, options) { const times = vue.ref(0); const loading = vue.ref(false); const placeholder = options?.placeholder; const data = vue.ref(placeholder ? placeholder() : null); const error = vue.ref(null); const state = vue.computed(() => ({ times: times.value, loading: loading.value, data: data.value, error: error.value })); const runAsync = async (...inputs) => { loading.value = true; error.value = null; try { times.value++; options?.onBefore?.(...inputs); data.value = await fn(...inputs); options?.onSuccess?.(data.value, ...inputs); return data.value; } catch (err) { error.value = err; options?.onError?.(err, ...inputs); throw err; } finally { loading.value = false; options?.onAfter?.(...inputs); } }; const run = (...inputs) => { runAsync(...inputs).then(); }; return { state, /** * 是否正在加载。 */ loading, /** * 异步操作返回的数据。 */ data, /** * 异步操作抛出的错误。 */ error, /** * 执行异步操作并返回 Promise。 * @param inputs 异步函数的参数。 * @returns 异步操作的结果。 */ runAsync, /** * 执行异步操作但不返回 Promise。 * @param inputs 异步函数的参数。 */ run }; } exports.useAsync = useAsync; //# sourceMappingURL=async.cjs.map