码迷,mamicode.com
首页 > Web开发 > 详细

vue3 自定义 hooks 优雅处理异步调用 ajax

时间:2021-04-24 11:55:00      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:const   ref   imp   err   cti   sea   efi   final   on()   

首先自定义一个专门处理异步的 hooks

import {reactive, toRefs} from "vue";
const useAsyncFn = (fn)=>{
    let data = reactive({value:undefined ,loading:false,err:undefined});
    const callBack = (...args)=>{
        data.loading = true;
        fn(...args).then((res)=>{
            data.value = res;
        },(err)=>{
            data.err = err
        }).finally(()=>{
            data.loading = false;
        })
    }

    return [toRefs(data),callBack];
}

export default useAsyncFn

  

用法为:

    let [data,callback] = useAsync(async(a)=>{
        let project = await fetch("/xxx?a="+a).then(res=>res.json());
        let iteration = await fetch("/xxx").then(res=>res.json());
        return {project,iteration}};
    })
    
      onMounted(()=>{
         callback(1)
      })
      

  

 

另外,如果想自动触发调用,可以进异步封装如下:

import useAsyncFn from "./useAsyncFn"
const useAsync = (fn)=>{
    const [ data,callback ] = useAsyncFn(fn);
    callback();
    return data;
}
export default useAsync;

  

则用法为:

 let res = useAsync(async()=>{
        let project = await fetch("/xxx").then(res=>res.json());
        let iteration = await fetch("/xxx").then(res=>res.json());
        return {project,iteration}};
    })

  

 

vue3 自定义 hooks 优雅处理异步调用 ajax

标签:const   ref   imp   err   cti   sea   efi   final   on()   

原文地址:https://www.cnblogs.com/muamaker/p/14693341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!