tunggu async tidak berfungsi dalam fungsi boleh gubah vue 3
P粉752826008
P粉752826008 2024-03-25 20:48:21
0
2
541

Dalam projek saya, saya mempunyai fungsi untuk memuat turun fail. Apabila butang diklik, fungsi onDownload akan dipanggil:

import {useOnDownload} from "../../use/useOnDownload"

setup() {

    ...

    const loading = ref(null)
    onDownload = (id) => {
        loading.value = id
        await useOnDownload(id)
        loading.value = null
    }
    
    return {loading, onDownload}
}

Saya memfaktorkan semula kod api dalam fail panggilan useOnDownload.js kerana komponen lain juga menggunakan kod yang sama.

export async function useOnDownload(id) {
    // make api call to server with axios
}

Apa salah saya? Saya perlu menunggu fungsi useOnDownload ... untuk pemuat berfungsi dengan baik.

P粉752826008
P粉752826008

membalas semua(2)
P粉071559609

Berikut ialah cara mencipta fungsi boleh gubah tak segerak menggunakan sintaks tunggu async

export default function useOnDownload() {
  const isLoading = ref(true);

  const onDownload = async () => {
    isLoading.value = true;
    try {
      const { data } = await axios.post('/api/download', {id: id}, 
     {responseType: 'blob'})
        // handle the response

    } catch (error) {
      console.log(error);
    } finally {
      isLoading.value = false;
    }
  };
   // invoke the function
  onDownload();

  return { // return your reactive data here };
}


import useOnDownload from "../../use/useOnDownload"
// no await in setup script or function 
const { reactiveDataReturned } = useOnDownload();

Klik di siniuntuk maklumat lanjut

P粉764003519

Saya berjaya menyelesaikan cara lain tanpa async dan menunggu...

Saya menyerahkan pemuat objek rujukan kepada hujah fungsi (sebagai pilihan) dan mengendalikannya dari sana...

export function useOnDownload(id, loader) {
   if(loader !== undefined) {
     loader.value = id
   }
   axios.post('/api/download', {id: id}, {
      responseType: 'blob'
   }).then(response => {
     // handle the response
     ...
     if(loader !== undefined) {
       loader.value = null
     }
   }).catch(error => {
     // handle the error
     ...
     if(loader !== undefined) {
       loader.value = null
     }
   })
}
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan