SnowGuest

SnowGuest

这里是 SnowGuest的博客站点,只会记录一些有意思的日常事
bilibili
github

如何の正しいリクエストのカプセル化と優雅なビジネスの組み込み (2)

安定した埋め込みビジネス#

ここでは、記事に接続します。

ここでは、vue3 のコードを例に挙げます。

import { ref, reactive } from "vue-demi";
import request from "上一篇文章末尾";
import type { AxiosRequestConfig } from "axios";


/* ユニークキーを指定する */
function getPaging<T>(conf: AxiosRequestConfig, k: keyof T) {
  const listMap = reactive<Map<T[k], T>>(new Map());
  const pageNum = ref(0);
  const pageSize = ref(1);
  const finish = ref(false);
  const loading = ref(false);
  const to = async (current: number) => {
    if (finish.value) throw new Error("no more");
    pageNum.value = current;
    await proxyRequest()
  }
  const next = async () => {
    await to(pageNum.value + 1);
  }
  const base = async () => {
    await to(pageNum.value - 1);
  }
  async function proxyRequest() {
    try {
      loading.value = true
      const result = await request({
        ...conf,
        data: Object.assign(conf.data, {
          pageNum: pageNum.value,
          pageSize: pageSize.value
        })
      });
      result.data.forEach(e => {
        listMap.set(e[k], e)
      });
      /* ページサイズよりも少ない数のデータが取得された場合、終了と見なす */
      if (pageSize > result.data.length) finish.value = true;
    } catch (error) {
      console.error(error)
    } finish {
      loading.value = false
    }
  }
  proxyRequest()
  return {
    listMap,
    pageNum,
    pageSize,
    finish,
    loading
  }
}
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。