From a728d3ba15c5b2316fbc30e482fb7de7c9753ae5 Mon Sep 17 00:00:00 2001 From: JOYCEQL <1449239013@qq.com> Date: Sun, 10 Nov 2024 23:45:34 +0800 Subject: [PATCH] perf: async2then --- .../src/components/editor/PdfExport.tsx | 33 ++++++++++++------- 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/apps/fronted/src/components/editor/PdfExport.tsx b/apps/fronted/src/components/editor/PdfExport.tsx index 0636b52..a3cc518 100644 --- a/apps/fronted/src/components/editor/PdfExport.tsx +++ b/apps/fronted/src/components/editor/PdfExport.tsx @@ -2,9 +2,8 @@ import React, { useState } from "react"; import { motion } from "framer-motion"; import { Download, Loader2 } from "lucide-react"; +import html2pdf from "html2pdf.js"; import { useResumeStore } from "@/store/useResumeStore"; -import dynamic from "next/dynamic"; -const html2pdf = dynamic(() => import("html2pdf.js"), { ssr: false }); export function PdfExport() { const { basic, theme } = useResumeStore(); @@ -13,9 +12,12 @@ export function PdfExport() { const handleExport = () => { setIsExporting(true); const element = document.querySelector("#resume-preview"); + if (!element) { + setIsExporting(false); return; } + const opt = { margin: [10, 10, 10, 10], filename: `${basic.name}_简历.pdf`, @@ -31,21 +33,28 @@ export function PdfExport() { orientation: "portrait" } }; - const res = html2pdf().set(opt).from(element).save(); - setIsExporting(false); - return res; + + html2pdf() + .set(opt) + .from(element) + .save() + .then((res) => { + return res; + }) + .catch((error) => { + console.error("PDF export failed:", error); + return { notFound: true }; + }) + .finally(() => { + setIsExporting(false); + return { finally: true }; + }); }; return (