ظاهر کلی برنامه بدین صورت است:

ظاهر برنامه

پروژه اولیه

پروژه اولیه را از این لینک دانلود کنید.

ساختار پروژه

retry
├── public
│   ├── favicon.ico
│   └── index.html
├── server
│   └── server.js
├── src
│   ├── __tests__
│   │   └── sample.test.js
│   ├── App.js
│   ├── index.css
│   └── index.js
├── package-lock.json
└── package.json
Plain text

راه‌اندازی پروژه

برای اجرای پروژه، باید NodeJS و npm را از قبل نصب کرده باشید.

  • ابتدا پروژه‌ی اولیه را دانلود و از حالت فشرده خارج کنید.
  • در پوشه‌ی retry ، دستور npm install را برای نصب نیازمندی‌ها اجرا کنید.
  • در همین پوشه، دستور npm start را برای راه‌اندازی پروژه اجرا کنید.
  • پس از انجام موفق این مراحل، با مراجعه به آدرس http://localhost:3000/ می‌توانید نتیجه را ببینید.

راه‌اندازی سرور

  • در پوشه‌ی retry ، دستور npm install را برای نصب نیازمندی‌ها اجرا کنید.
  • در همین پوشه، دستور npm run server را برای راه‌اندازی سرور پروژه اجرا کنید.

جزئیات

به ما آدرسی از سرور داده شده است و از ما خواسته شده که سالم بودن این آدرس را چک کنیم. برای اینکار تصمیم گرفتیم که درخواست‌های مختلف با فاصله زمانی مختلف به آدرس داده شده ارسال کنیم.

مواردی که باید در این سوال به آنها دقت کنید:

  • بلافاصله بعد از لود شدن صفحه، ارسال درخواست‌ها شروع میشود و اولین درخواست فرستاده میشود. بعد از آن درخواست‌ها با تاخیر فرستاده میشوند. تاخیر بین درخواست‌ها از firstRetryDelay (که کامپوننت به عنوان پراپرتی میگیرد) شروع میشود و هر بار به اندازه همان firstRetryDelay به آن اضافه میشود.
  • آدرس که درخواست‌ها به آن ارسال میشود به عنوان پراپرتی با نام url دریافت میشود.‌ (برای اینکه این آدرس کار کند، باید سرور طبق توضیحات بالا راه‌اندازی شود)
  • اگر درخواستی موفقیت آمیز بود (status برابر ۲۰۰ باشد)، درخواست دیگری بعد از تاخیر ارسال میشود.
  • اگر درخواستی ناموفق بود‌ (status برابر ۵۰۰ باشد)، نتیجه نمایش داده میشود. فرمت نتیجه بعد از ناموفق بودن درخواست: (که همان تعداد تلاش‌ها تا این درخواست با شمردن این درخواست است)
Failed after <attemptCount> attempts.
Plain text
  • ماکسیمم تعداد درخواست‌ها به تعداد maxAttempts که از پراپرتی گرفته میشود. اگر بعد از ماکسیمم تعداد درخواست، همه‌ی تلاش‌ها موفقیت آمیز بود، نتیجه نمایش داده میشود. فرمت نتیجه بعد از موفق بودن همه‌ی درخواست‌ها:
Success after <attemptCount> attempts.
Plain text
  • المان #message برای نشان دادن پیشرفت درخواست‌‌ها است. بعد از اتمام هردرخواست پیامی با فرمت زیر نمایش داده میشود:
Attempt <previousAttempt> done. Retrying in <nextDelay> milliseconds...
Plain text

و فقط موقع اولین درخواست پیامی که نوشته میشود:

First Attempt...
Plain text

نکات

  • همه‌ی درخواست‌ها از نوع GET هستند و باید با fetch انجام شوند.
  • شما تنها مجاز به اعمال تغییرات در فایل src/App.js هستید.
  • برای ارسال پاسخ میتوانید فقط فایل App.js را بدون zip کردن ارسال کنید یا کل پروژه را zip کرده و ارسال کنید. دقت کنید که پوشه‌ی node_modules در فایل ارسالی نباشد.

ارسال پاسخ برای این سؤال
فایلی انتخاب نشده است.