DataLoader.ts 521 B

1234567891011121314151617181920212223242526272829
  1. import { ref } from "vue"
  2. export function useDataLoader<T>(loader: () => Promise<T>, options: { immediate?: boolean }) {
  3. const data = ref<T>()
  4. const loading = ref(false)
  5. const error = ref<Error>()
  6. function load() {
  7. loading.value = true
  8. loader().then((res) => {
  9. data.value = res
  10. loading.value = false
  11. }).catch((err) => {
  12. error.value = err
  13. loading.value = false
  14. })
  15. }
  16. if (options.immediate) {
  17. load()
  18. }
  19. return {
  20. data,
  21. loading,
  22. error,
  23. load,
  24. }
  25. }