You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

43 lines
822 B

import {
AsyncComponentLoader,
Component,
defineAsyncComponent,
defineComponent,
h,
markRaw,
ref,
} from "vue";
let num = 0;
export function useAsyncComponent(comp: AsyncComponentLoader<any>) {
let retryFn: Function;
const asyncComp = defineAsyncComponent({
loader: comp,
// loader: () =>
// new Promise<Component>((resolve, reject) => {
// // resolve(comp());
// // resolve(() => h("div", {}, "aaa"));
// reject();
// }),
loadingComponent: () => h("div", "loading"),
errorComponent: () =>
h(
"div",
{
onClick() {
if (retryFn) {
retryFn();
}
},
},
"error"
),
timeout: 3000,
onError(err, retry, fail, attempts) {
console.error(err);
retryFn = retry;
},
});
return markRaw(h(asyncComp));
}
export default useAsyncComponent;