# پروژه اولیه
پروژه اولیه را از
[این لینک](/contest/assignments/76600/download_problem_initial_project/265351/)
دانلود کنید. ساختار فایلهای پروژه به صورت زیر است.
```
Promise
└── <mark class="violet">main.js</mark>
```
# جزئیات
در این مسئله، باید مراحل تهیه غذا با استفاده از `Promise` پیادهسازی شود، در نظر داشته باشید که ترتیب عملیاتهای انجام شده اهمیت خواهند داشت.
### تابع `doneMessage`
این تابع وظیفه نمایش مستقیم یک پیغام در کنسول را خواهد داشت که شامل متن زیر خواهد بود و همیشه به عنوان یک `callback fucntion` در توابع پیش رو استفاده خواهد شد.
```
[prevStep] done, next step ...
prevSteps title : preparing, making, serving and eating
```
**نکته: خروجی تمام توابع پیش رو یک `Promise` به شکل موفقیت آمیز خواهد بود که متن آن برابر با مقدار `callback function` است.**
### تابع `prepare`
این تابع وظیفه آمادهسازی مواد غذایی را خواهد داشت که ورودی آن دو مقدار خواهد بود، مقدار اول، آرایهای از رشتهها که شامل موارد تشکل دهنده غذا خواهد بود و مقدار دوم `callback function` که باید بعد از مدت زمان مشخص ۵۰۰ میلیثانیه فراخوانی شود.
+ قبل از شروع فرآِیند اصلی تابع باید مقدار `preparing stuffs: eggs, tomatoes` در کنسول نمایش داده شود.
### تابع `cooking`
این تابع وظیفه پخت و پز غذا را برعهده دارد که ورودی آن یک `callback function` است که باید بعد از مدت زمان مشخص ۲۰۰۰ میلیثانیه فراخوانی شود.
+ قبل از شروع فرآِیند اصلی تابع باید مقدار `making an omelette ...` در کنسول نمایش داده شود.
### تابع `serve`
این تابع وظیفه سرو و چیدمان غذا را خواهد داشت که ورودی آن یک `callback function` است که باید بعد از مدت زمان مشخص ۵۰۰ میلیثانیه فراخوانی شود.
+ قبل از شروع فرآِیند اصلی تابع باید مقدار `serving food ...` در کنسول نمایش داده شود.
## تابع `eat`
این تابع وظیفه خوردن غذا را خواهد داشت! که ورودی آن یک `callback function` است که باید بعد از مدت زمان مشخص ۱۰۰۰ میلیثانیه فراخوانی شود.
+ قبل از شروع فرآِیند اصلی تابع باید مقدار `eating ...` در کنسول نمایش داده شود.
## مثال خروجی نهایی
```
startCooking(["eggs", "tomatoes"]);
preparing stuffs: eggs, tomatoes
preparing done, next step ...
making an omelette ...
making done, next step ...
serving food ...
serving done, next step ...
eating ...
eating done, next step ...
process is done
```
# نکات
+ ترتیب نمایش پیام ها در کنسول اهمیت خواهد داشت.
+ این مسئله باید با استفاده از `Promise` پیادهسازی شود.
+ در نهایت پس از اتمام عملیات های تعریف شده باید مقدار `process is done` در کنسول نمایش داده شود.
+ شما فقط مجاز به تغییر فایل `main.js` هستید.
# آنچه باید آپلود کنید
فایل `main.js` نهایی را ذخیره کنید و بهصورت تکی آپلود کنید. یا اگر قصد دارید بهصورت فایل فشرده ارسال کنید، ساختار فایل باید بهصورت زیر باشد:
```
[your-zip-file-name].zip
└── <mark class="violet">main.js</mark>
```
ارسال پاسخ برای این سؤال
در حال حاضر شما دسترسی ندارید.