ظاهر کلی برنامه بدین صورت است:
پروژه اولیه
پروژه اولیه را از این لینک دانلود کنید.
ساختار پروژه
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
راهاندازی پروژه
برای اجرای پروژه، باید 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.
- ماکسیمم تعداد درخواستها به تعداد
maxAttempts
که از پراپرتی گرفته میشود. اگر بعد از ماکسیمم تعداد درخواست، همهی تلاشها موفقیت آمیز بود، نتیجه نمایش داده میشود. فرمت نتیجه بعد از موفق بودن همهی درخواستها:
Success after <attemptCount> attempts.
- المان
#message
برای نشان دادن پیشرفت درخواستها است. بعد از اتمام هردرخواست پیامی با فرمت زیر نمایش داده میشود:
Attempt <previousAttempt> done. Retrying in <nextDelay> milliseconds...
و فقط موقع اولین درخواست پیامی که نوشته میشود:
First Attempt...
نکات
- همهی درخواستها از نوع GET هستند و باید با fetch انجام شوند.
- شما تنها مجاز به اعمال تغییرات در فایل
src/App.js
هستید. - برای ارسال پاسخ میتوانید فقط فایل
App.js
را بدون zip کردن ارسال کنید یا کل پروژه را zip کرده و ارسال کنید. دقت کنید که پوشهی node_modules در فایل ارسالی نباشد.
ارسال پاسخ برای این سؤال