unstable_rethrow

يمكن استخدام unstable_rethrow لتجنب التقاط الأخطاء الداخلية التي يطرحها Next.js عند محاولة التعامل مع الأخطاء المطروحة في كود التطبيق الخاص بك.

على سبيل المثال، استدعاء دالة notFound سوف يطرح خطأً داخليًا في Next.js ويعرض مكون not-found.js. ومع ذلك، إذا تم استخدامه داخل كتلة try/catch، فسيتم التقاط الخطأ، مما يمنع عرض not-found.js:

@/app/ui/component.tsx
import { notFound } from 'next/navigation'

export default async function Page() {
  try {
    const post = await fetch('https://.../posts/1').then((res) => {
      if (res.status === 404) notFound()
      if (!res.ok) throw new Error(res.statusText)
      return res.json()
    })
  } catch (err) {
    console.error(err)
  }
}

يمكنك استخدام واجهة برمجة التطبيقات unstable_rethrow لإعادة طرح الخطأ الداخلي والاستمرار بالسلوك المتوقع:

@/app/ui/component.tsx
import { notFound, unstable_rethrow } from 'next/navigation'

export default async function Page() {
  try {
    const post = await fetch('https://.../posts/1').then((res) => {
      if (res.status === 404) notFound()
      if (!res.ok) throw new Error(res.statusText)
      return res.json()
    })
  } catch (err) {
    unstable_rethrow(err)
    console.error(err)
  }
}

تعتمد واجهات برمجة التطبيقات التالية لـ Next.js على طرح خطأ يجب إعادة طرحه والتعامل معه من قبل Next.js نفسه:

إذا تم تعيين مقطع مسار لطرح خطأ ما لم يكن ثابتًا، فإن استدعاء API الديناميكي سوف يطرح أيضًا خطأً لا يجب التقاطه من قبل المطور. لاحظ أن التصيير الجزئي المسبق (PPR) يؤثر على هذا السلوك أيضًا. هذه الواجهات هي:

معلومة مفيدة:

  • يجب استدعاء هذه الطريقة في أعلى كتلة catch، وتمرير كائن الخطأ كوسيطتها الوحيدة. يمكن أيضًا استخدامها ضمن معالج .catch لوعد.
  • إذا تأكدت أن استدعاءاتك لواجهات برمجة التطبيقات التي تطرح أخطاءً ليست ملفوفة في try/catch، فلن تحتاج إلى استخدام unstable_rethrow.
  • أي تنظيف للموارد (مثل مسح الفواصل الزمنية، المؤقتات، إلخ) يجب أن يتم إما قبل استدعاء unstable_rethrow أو داخل كتلة finally.