ØªØµÙØ± Ú©ÙÛØ¯ Ú©Ù ÛÚ© Ø®ÙØ§ÙÙØ¯Ù برتر ÙØ³ØªÛد Ù Ø·Ø±ÙØ¯Ø§Ø±Ø§Ù شب Ù Ø±ÙØ² Ø¯Ø±Ø®ÙØ§Ø³Øª Ø¢ÙÙÚ¯ Ø¨Ø¹Ø¯Û Ø´Ù Ø§ را Ø¯Ø§Ø±ÙØ¯.
Ø¨Ø±Ø§Û Ø§ÛÙÚ©Ù Ú©Ù Û Ø±Ø§ØØª بشÙÛØ¯Ø ÙÙÙ Ù ÛâØ¯ÙÛØ¯ پس از Ø§ÙØªØ´Ø§Ø± آ٠را Ø¨Ø±Ø§Û Ø¢ÙâÙØ§ ارسا٠کÙÛØ¯. ش٠ا ÛÚ© ÙÛØ³Øª Ø¨Ù Ø·Ø±ÙØ¯Ø§Ø±Ø§Ù Ø®ÙØ¯ Ù ÛâØ¯ÙÛØ¯. Ø¢ÙâÙØ§ Ù ÛâØªÙØ§ÙÙØ¯ آدرس اÛÙ ÛÙ Ø®ÙØ¯ را پر Ú©ÙÙØ¯Ø Ø¨Ù Ø·ÙØ±Û Ú©Ù ÙÙØªÛ Ø¢ÙÙÚ¯ در دسترس ÙØ±Ø§Ø± Ú¯Ø±ÙØªØ Ù٠٠٠شترکÛÙ ÙÙØ±Ø§ آ٠را Ø¯Ø±ÛØ§Ùت Ú©ÙÙØ¯. Ù ØØªÛ اگر Ù Ø´Ú©ÙÛ Ù¾ÛØ´ Ø¨ÛØ§ÛØ¯Ø Ù Ø«ÙØ§ آتش Ø³ÙØ²Û در Ø§Ø³ØªÙØ¯ÛÙØ Ø¨Ù Ø·ÙØ±Û Ú©Ù ÙØªÙاÙÛØ¯ Ø¢ÙÙÚ¯ را Ù ÙØªØ´Ø± Ú©ÙÛØ¯Ø باز Ù٠ب٠آÙâÙØ§ Ø§Ø·ÙØ§Ø¹ Ø¯Ø§Ø¯Ù Ø®ÙØ§Ùد شد.
ÙÙ Ù Ø®ÙØ´ØØ§Ù ÙØ³ØªÙد: Ø´Ù Ø§Ø ÚÙ٠٠رد٠دÛگر ٠زاØÙ ش٠ا ÙÙ ÛâØ´ÙÙØ¯Ø Ù Ø·Ø±ÙØ¯Ø§Ø±Ø§ÙØ ÚÙ٠آÙÙÚ¯ را از دست ÙÙ ÛâØ¯ÙÙØ¯.
اÛÙ ÛÚ© تشبÛÙ ÙØ§ÙØ¹Û Ø¨Ø±Ø§Û ÚÛØ²ÙاÛÛ Ø§Ø³Øª Ú©Ù Ø§ØºÙØ¨ در Ø¨Ø±ÙØ§Ù ÙâÙÙÛØ³Û دارÛÙ :
- ÛÚ© «کد تÙÙÛØ¯âÚ©ÙÙØ¯Ù» Ú©Ù Ú©Ø§Ø±Û Ø§ÙØ¬Ø§Ù Ù ÛâØ¯ÙØ¯ ٠ز٠اÙÛ Ù ÛâØ¨Ø±Ø¯. ب٠عÙÙØ§Ù Ù Ø«Ø§ÙØ Ú©Ø¯ÙØ§ÛÛ Ú©Ù Ø¯Ø§Ø¯ÙâÙØ§ را از طرÛÙ Ø´Ø¨Ú©Ù Ø¨Ø§Ø±Ú¯ÛØ±Û Ù ÛâÚ©ÙØ¯. اÛÙ ÛÚ© Â«Ø®ÙØ§ÙÙØ¯Ù» است.
- ÛÚ© «کد ٠صرÙâÚ©ÙÙØ¯Ù» Ú©Ù ÙØªÛجÙâÛ Â«Ú©Ø¯ تÙÙÛØ¯Ú©ÙÙØ¯Ù» را پس از Ø¢Ù Ø§Ø¯Ù Ø´Ø¯Ù Ù Û Ø®ÙØ§Ùد. Ø¨Ø³ÛØ§Ø±Û از ØªÙØ§Ø¨Ø¹ ٠٠ک٠است Ø¨Ù Ø¢Ù ÙØªÛج٠ÙÛØ§Ø² Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÙØ¯. اÛÙÙØ§ Â«Ø·Ø±ÙØ¯Ø§Ø±Ø§Ù» ÙØ³ØªÙد.
- ÛÚ© Promise (٠عÙÛ ÙØºÙÛ: ÙÙÙ/ÙØ¹Ø¯Ù) ÛÚ© Ø´ÛØ¡ خاص Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت است ک٠«کد تÙÙÛØ¯âÚ©ÙÙØ¯Ù» ٠«کد ٠صرÙâÚ©ÙÙØ¯Ù» را ب٠ÛکدÛگر Ù¾ÛÙÙØ¯ Ù ÛâØ¯ÙØ¯. از ÙØ¸Ø± تشبÛ٠٠ا: اÛ٠«ÙÙØ±Ø³Øª اشتراک» است. «کد تÙÙÛØ¯âÚ©ÙÙØ¯Ù» ÙØ± Ù ÙØ¯Ø§Ø± ز٠اÙÛ Ø±Ø§ Ú©Ù Ø¨Ø±Ø§Û ØªÙÙÛØ¯ ÙØªÛØ¬Ù ÙØ¹Ø¯Ù داد٠شد٠ÙÛØ§Ø² دارد ٠صر٠٠ÛâÚ©ÙØ¯ Ù Promise Ø¢Ù ÙØªÛج٠را پس از Ø¢Ù Ø§Ø¯Ù Ø´Ø¯Ù Ø¨Ø±Ø§Û ÙÙ Ù Ú©Ø¯ÙØ§Û ٠شترک شد٠در دسترس ÙØ±Ø§Ø± Ù ÛâØ¯ÙØ¯.
اÛ٠تشبÛÙ Ø®ÛÙÛ Ø¯ÙÛÙ ÙÛØ³ØªØ Ø²ÛØ±Ø§ PromiseÙØ§Û Ø¬Ø§ÙØ§âاسکرÛپت Ù¾ÛÚÛØ¯ÙâØªØ± از ÛÚ© ÙÛØ³Øª اشتراک ساد٠است: Ø¢ÙâÙØ§ Ø¯Ø§Ø±Ø§Û ÙÛÚÚ¯ÛâÙØ§ Ù Ù ØØ¯ÙØ¯ÛØªâÙØ§Û اضاÙÛ ÙØ³ØªÙد. ا٠ا Ø¨Ø±Ø§Û Ø´Ø±ÙØ¹ Ø®ÙØ¨ است.
سÛÙØªÚ©Ø³ Ø³Ø§Ø²ÙØ¯Ù Ø¨Ø±Ø§Û ÛÚ© Ø´ÛØ¡ Promise Ø¨Ù ØµÙØ±Øª Ø²ÛØ± است:
let promise = new Promise(function(resolve, reject) {
// اجراکÙÙØ¯Ù (کد تÙÙÛØ¯Ú©ÙÙØ¯Ù , "Ø®ÙØ§ÙÙØ¯Ù")
});
ØªØ§Ø¨Ø¹Û Ú©Ù Ø¨Ù new Promise ارسا٠Ù
ÛâØ´ÙØ¯ اجراâÚ©ÙÙØ¯Ù (executer) ÙØ§Ù
ÛØ¯Ù Ù
ÛâØ´ÙØ¯. ÙÙگاÙ
Û Ú©Ù new Promise Ø§ÛØ¬Ø§Ø¯ Ù
ÛâØ´ÙØ¯Ø اجراâÚ©ÙÙØ¯Ù Ø¨Ù Ø·ÙØ± Ø®ÙØ¯Ú©Ø§Ø± اجرا Ù
ÛâØ´ÙØ¯. اÛ٠شاÙ
٠کد تÙÙÛØ¯âÚ©ÙÙØ¯Ù است ک٠در ÙÙØ§Ûت Ø¨Ø§ÛØ¯ ÙØªÛج٠را Ø§ÛØ¬Ø§Ø¯ Ú©ÙØ¯. از ÙØ¸Ø± تشبÛÙ Ø¨Ø§ÙØ§: اجراکÙÙØ¯Ù Â«Ø®ÙØ§ÙÙØ¯Ù» است.
آرگÙÙ
اÙâÙØ§Û Ø¢Ù resolve Ù reject ÙØ±Ø§Ø®ÙاÙâÙØ§ÛÛ ÙØ³ØªÙد Ú©Ù ØªÙØ³Ø· Ø®ÙØ¯ Ø¬Ø§ÙØ§âاسکرÛپت ارائ٠شد٠است. کد Ù
ا ÙÙØ· در داخ٠اجراâÚ©ÙÙØ¯Ù است.
ÙÙØªÛ اجراâÚ©ÙÙØ¯Ù Ø¨Ù ÙØªÛØ¬Ù Ø±Ø³ÛØ¯Ø ÚÙ Ø²ÙØ¯ باشد ÚÙ Ø¯ÛØ±Ø Ù ÙÙ ÙÛØ³ØªØ Ø¨Ø§ÛØ¯ ÛÚ©Û Ø§Ø² اÛÙ callback ÙØ§ را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙØ¯:
resolve(value)âvalueاگر کار با Ù ÙÙÙÛØª Ø¨Ù Ù¾Ø§ÛØ§Ù Ø±Ø³ÛØ¯Ø با ÙØªÛجÙâÛ.reject(error)â ÙÙ Ø§Ù Ø´ÛØ¡ خطا استerrorØ Ø§Ú¯Ø± خطاÛÛ Ø±Ø® داد٠باشد
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ø¨Ù Ø·ÙØ± Ø®ÙØ§ØµÙ: اجراکÙÙØ¯Ù Ø¨Ù Ø·ÙØ± Ø®ÙØ¯Ú©Ø§Ø± اجرا Ù
ÛâØ´ÙØ¯ Ù ØªÙØ§Ø´ Ù
ÛâÚ©ÙØ¯ تا ÛÚ© کار را Ø§ÙØ¬Ø§Ù
Ø¯ÙØ¯. ÙÙگاÙ
Û Ú©Ù Ú©Ø§Ø± با ØªÙØ§Ø´ Ø¨Ù Ù¾Ø§ÛØ§Ù Ø±Ø³ÛØ¯Ø در ØµÙØ±Øª Ù
ÙÙÙÛØªâØ¢Ù
ÛØ² Ø¨ÙØ¯ÙØ resolve ÛØ§ در ØµÙØ±Øª ÙØ¬Ùد ÙØ± خطاÛÛ reject را ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâÚ©ÙØ¯.
Ø´ÛØ¡ promise Ú©Ù ØªÙØ³Ø· Ø³Ø§Ø²ÙØ¯Ù new Promise Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù شد٠است Ø¯Ø§Ø±Ø§Û Ø§ÛÙ ÙÛÚÚ¯ÛâÙØ§Û داخÙÛ Ø§Ø³Øª:
stateâ Ø¯Ø± ابتدا"pending"سپس با ÙØ±Ø§Ø®ÙاÙÛØresolveبÙ"fulfilled"ÛØ§ ز٠اÙÛ Ú©ÙrejectÙØ±Ø§Ø®ÙاÙÛ Ù ÛâØ´ÙØ¯ بÙ"rejected"تغÛÛØ± Ù ÛâÚ©ÙØ¯.resultâ Ø¯Ø± ابتداundefinedØ Ø³Ù¾Ø³ با ÙØ±Ø§Ø®ÙاÙÛresolve(value)بÙvalueÛØ§ ز٠اÙÛ Ú©Ùreject(error)ÙØ±Ø§Ø®ÙاÙÛ Ù Û Ø´ÙØ¯ بÙerrorتغÛÛØ± Ù ÛâÚ©ÙØ¯.
Ø¨ÙØ§Ø¨Ø±Ø§Û٠اجراâÚ©ÙÙØ¯Ù در ÙÙØ§Ûت promise را ب٠ÛÚ©Û Ø§Ø² اÛÙ ØØ§Ùات Ù
ÙØªÙÙ Ù
ÛâÚ©ÙØ¯:
Ø¨Ø¹Ø¯Ø§Ù Ø®ÙØ§ÙÛÙ Ø¯ÛØ¯ Ú©Ù ÚÚ¯ÙÙÙ âØ·Ø±ÙØ¯Ø§Ø±Ø§Ùâ Ù ÛâØªÙØ§ÙÙØ¯ در اÛ٠تغÛÛØ±Ø§Øª ٠شترک Ø´ÙÙØ¯.
در اÛÙØ¬Ø§ ÛÚ© ÙÙ
ÙÙ٠از Ø³Ø§Ø²ÙØ¯Ù Promise Ù ÛÚ© تابع اجراâÚ©ÙÙØ¯Ù ساد٠با «کد تÙÙÛØ¯âÚ©ÙÙØ¯Ù» دارÛÙ
ک٠زÙ
Ø§ÙØ¨Ø± است (از طرÛÙ setTimeout):
let promise = new Promise(function(resolve, reject) {
// ساخت٠Ù
ÛâØ´ÙØ¯ Ø¨Ù Ø·ÙØ± Ø®ÙØ¯Ú©Ø§Ø± اجرا Ù
ÛâØ´ÙØ¯ Promise اÛ٠تابع زÙ
اÙÛ Ú©Ù
// Ø§ÙØ¬Ø§Ù
شد "done" پس از 1 ثاÙÛ٠سÛÚ¯ÙØ§Ù Ù
ÛâØ¯ÙØ¯ ک٠کار با ÙØªÛجÙ
setTimeout(() => resolve("Ø§ÙØ¬Ø§Ù
شدÙ"), 1000);
});
با Ø§Ø¬Ø±Ø§Û Ú©Ø¯ Ø¨Ø§ÙØ§ Ù Û ØªÙØ§ÙÛ٠د٠ÚÛØ² را ببÛÙÛÙ :
Û±. اجراâÚ©ÙÙØ¯Ù Ø¨Ù ØµÙØ±Øª Ø®ÙØ¯Ú©Ø§Ø± Ù Ø¨ÙØ§ÙاصÙÙ ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâØ´ÙØ¯ (ØªÙØ³Ø· new Promise).
Û². اجراâÚ©ÙÙØ¯Ù د٠آرگÙÙ
Ø§Ù Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙØ¯: resolve Ù reject. اÛÙ ØªÙØ§Ø¨Ø¹ ØªÙØ³Ø· Ù
ÙØªÙر Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت از Ù¾ÛØ´ تعرÛ٠شدÙâØ§ÙØ¯, Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ Ù
ا ÙÛØ§Ø²Û Ø¨Ù Ø§ÛØ¬Ø§Ø¯ Ø¢ÙâÙØ§ ÙØ¯Ø§Ø±ÛÙ
. ÙÙØªÛ Ø¢Ù
اد٠شدÛÙ
ÙÙØ· Ø¨Ø§ÛØ¯ ÛÚ©Û Ø§Ø² Ø¢ÙâÙØ§ را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ
.
پس از ÛÚ© ثاÙÛÙ "پردازش"Ø Ø§Ø¬Ø±Ø§âÚ©ÙÙØ¯Ù `resolve("done")` را Ø¨Ø±Ø§Û Ø§ÛØ¬Ø§Ø¯ ÙØªÛØ¬Ù ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâÚ©ÙØ¯. اÛÙ ÙØ¶Ø¹Ûت Ø´ÛØ¡ `promise` را تغÛÛØ± Ù
ÛâØ¯Ù:

اÛÙ ÙÙ ÙÙÙâØ§Û Ø§Ø² تک٠ÛÙ Ù ÙÙÙÛØª Ø¢Ù ÛØ² کار Ø¨ÙØ¯Ø ÛÚ© âfulfilled promiseâ.
Ù ØØ§Ù ÙÙ ÙÙÙâØ§Û Ø§Ø² رد کرد٠(rejecting) ÛÚ© Promise ØªÙØ³Ø· اجراâÚ©ÙÙØ¯Ù با ÛÚ© خطا:
let promise = new Promise(function(resolve, reject) {
// بعد از 1 ثاÙÛ٠سÛÚ¯ÙØ§Ù Ù
ÛâØ¯ÙØ¯ ک٠کار با ÛÚ© خطا تÙ
اÙ
شد٠است
setTimeout(() => reject(new Error("Whoops!")), 1000);
});
ÙØ±Ø§Ø®ÙاÙÛÙ (...)reject Ø´ÛØ¡ Promise را Ø¨Ù ÙØ¶Ø¹Ûت "rejected" Ù
ÛâØ¨Ø±Ø¯:
Ø¨Ù Ø·ÙØ± Ø®ÙØ§ØµÙØ Ø§Ø¬Ø±Ø§âÚ©ÙÙØ¯Ù Ø¨Ø§ÛØ¯ ÛÚ© کار را Ø§ÙØ¬Ø§Ù
Ø¯ÙØ¯ (Ù
عÙ
ÙÙØ§Ù Ú©Ø§Ø±Û Ú©Ù Ø²Ù
ا٠Ù
ÛâØ¨Ø±Ø¯) ٠سپس resolve ÛØ§ reject را Ø¨Ø±Ø§Û ØªØºÛÛØ± ÙØ¶Ø¹Ûت Ø´ÛØ¡ Promise Ù
Ø±Ø¨ÙØ·Ù ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙØ¯.
ب٠ÛÚ© Promise Ú©Ù ÛØ§ ØÙâÙâÙØµÙ (resolved) Ù ÛâØ´ÙØ¯ ÛØ§ رد (rejected) Ù ÛâØ´ÙØ¯Ø «تسÙÛÙâØ´Ø¯Ù» (âsettledâ) Ù ÛâÚ¯ÙÛÙØ¯Ø Ø¨Ø±Ø®ÙØ§Ù Promise ک٠در ابتدا Â«Ø¯Ø±ØØ§Ù Ø§ÙØªØ¸Ø§Ø±Â» (âpendingâ) است.
اجراâÚ©ÙÙØ¯Ù Ø¨Ø§ÛØ¯ ÙÙØ· ÛÚ© resolve ÛØ§ ÛÚ© reject را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙØ¯. ÙØ± تغÛÛØ± ÙØ¶Ø¹ÛØªÛ ÙÙØ§ÛÛ Ø§Ø³Øª.
ÙÙ
Ù ÙØ±Ø§Ø®ÙاÙÛâÙØ§Û دÛگر از resolve Ù reject ÙØ§Ø¯ÛØ¯Ù Ú¯Ø±ÙØªÙ Ù
ÛâØ´ÙÙØ¯:
let promise = new Promise(function(resolve, reject) {
resolve("Ø§ÙØ¬Ø§Ù
شدÙ");
reject(new Error("â¦")); // ÙØ§Ø¯ÛØ¯Ù Ú¯Ø±ÙØªÙ شد
setTimeout(() => resolve("â¦")); // ÙØ§Ø¯ÛØ¯Ù Ú¯Ø±ÙØªÙ شد
});
Ø§ÛØ¯Ù اÛ٠است ک٠کار Ø§ÙØ¬Ø§Ù Ø´Ø¯Ù ØªÙØ³Ø· اجراâÚ©ÙÙØ¯Ù ٠٠ک٠است تÙÙØ§ ÛÚ© ÙØªÛØ¬Ù ÛØ§ ÛÚ© خطا داشت٠باشد.
ÙÙ
ÚÙÛÙØ resolve/reject تÙÙØ§ ÛÚ© آرگÙÙ
ا٠(ÛØ§ ÙÛÚÛ) را Ø§ÙØªØ¸Ø§Ø± دارد ٠آرگÙÙ
اÙâÙØ§Û اضاÙÛ Ø±Ø§ ÙØ§Ø¯Ûد٠Ù
ÛâÚ¯ÛØ±Ø¯.
Error رد (reject) Ú©ÙÛØ¯Ø¯Ø± ØµÙØ±ØªÛ Ú©Ù Ù
Ø´Ú©ÙÛ Ù¾ÛØ´ Ø¨ÛØ§ÛØ¯Ø Ø§Ø¬Ø±Ø§âÚ©ÙÙØ¯Ù Ø¨Ø§ÛØ¯ reject را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙØ¯. اÛ٠کار Ù
ÛâØªÙØ§Ùد با ÙØ± ÙÙØ¹ آرگÙÙ
اÙÛ Ø§ÙØ¬Ø§Ù
Ø´ÙØ¯ (دÙÛÙØ§Ù Ù
اÙÙØ¯ resolve). اÙ
ا ØªÙØµÛÙ Ù
ÛâØ´ÙØ¯ از Ø§Ø´ÛØ§Ø¡ Error (ÛØ§ Ø§Ø´ÛØ§ÛÛ Ú©Ù Ø§Ø² Error ب٠ارث Ù
ÛâØ¨Ø±ÙØ¯) Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. دÙÛÙ Ø¢Ù Ø¨Ù Ø²ÙØ¯Û Ù
شخص Ø®ÙØ§Ùد شد.
resolve/rejectدر عÙ
ÙØ ÛÚ© اجراâÚ©ÙÙØ¯Ù Ù
عÙ
ÙÙØ§Ù Ú©Ø§Ø±Û Ø±Ø§ Ø¨Ù ØµÙØ±Øª ÙØ§ÙÙ
زÙ
Ø§Ù Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙØ¯ ٠پس از Ù
Ø¯ØªÛ resolve/reject را ÙØ±Ø§Ø®ÙاÙÛ Ù
ÛâÚ©ÙØ¯Ø اÙ
ا Ù
Ø¬Ø¨ÙØ± ÙÛØ³Øª. ÙÙ
ÚÙÛÙ Ù
ÛâØªÙØ§ÙÛÙ
Ø¨ÙØ§ÙاصÙÙ reject ÛØ§ resolve را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ
Ø Ù
اÙÙØ¯ اÛÙ:
let promise = new Promise(function(resolve, reject) {
// ÙÙØª Ø®ÙØ¯ را Ø¨Ø±Ø§Û Ø§ÙØ¬Ø§Ù
کار صر٠ÙÙ
Û Ú©ÙÛÙ
resolve(123); // Ø¨ÙØ§ÙاصÙÙ ÙØªÛج٠را بدÙÛØ¯: 123
});
ب٠عÙÙØ§Ù Ù Ø«Ø§ÙØ اÛ٠٠٠ک٠است ز٠اÙÛ Ø§ØªÙØ§Ù بÛÙØªØ¯ ک٠٠ا Ø´Ø±ÙØ¹ Ø¨Ù Ø§ÙØ¬Ø§Ù ÛÚ© کار Ù ÛâÚ©ÙÛÙ Ø Ø§Ù Ø§ بعد Ù ÛâØ¨ÛÙÛÙ Ú©Ù ÙÙ Ù ÚÛØ² ÙØ¨Ùا٠تک٠Û٠شد٠٠در ØØ§Ùظ٠پÙÙØ§Ù(cache) Ø°Ø®ÛØ±Ù شد٠است.
Ù Ø´Ú©ÙÛ ÙØ¯Ø§Ø±Ø¯. ٠ا Ø¨ÙØ§ÙاصÙÙ ÛÚ© Promise ØÙâØ´Ø¯Ù (resolved) دارÛÙ .
state Ù result داخÙÛ ÙØ³ØªÙدÙÛÚÚ¯Û ÙØ§Û state Ù result Ø´ÛØ¡ Promise داخÙÛ ÙØ³ØªÙد. Ù
ا ÙÙ
ÛâØªÙØ§ÙÛÙ
Ù
ستÙÛÙ
ا٠ب٠آÙâÙØ§ Ø¯Ø³ØªØ±Ø³Û Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛÙ
. Ø¨Ø±Ø§Û Ø§Û٠کار Ù
ÛâØªÙØ§ÙÛÙ
از Ù
ØªØ¯ÙØ§Û .then/.catch/.finally Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
. در Ø²ÛØ± ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯ÙâØ§ÙØ¯.
٠صرÙâÚ©ÙÙØ¯Ú¯Ø§Ù: thenØ catch
ÛÚ© Ø´ÛØ¡ Promise ب٠عÙÙØ§Ù ÛÚ© Ù¾ÛÙÙØ¯ بÛ٠اجراکÙÙØ¯Ù (âکد تÙÙÛØ¯âÚ©ÙÙØ¯Ùâ ÛØ§ âØ®ÙØ§ÙÙØ¯Ùâ) Ù ØªÙØ§Ø¨Ø¹ Ù
صرÙâÚ©ÙÙØ¯Ù (âØ·Ø±ÙØ¯Ø§Ø±Ø§Ùâ) عÙ
Ù Ù
ÛâÚ©ÙØ¯ Ú©Ù ÙØªÛØ¬Ù ÛØ§ خطا را Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙØ¯. ØªÙØ§Ø¨Ø¹ Ù
صرÙâÚ©ÙÙØ¯Ù را Ù
ÛâØªÙØ§Ù با Ø§Ø³ØªÙØ§Ø¯Ù از Ù
ØªØ¯ÙØ§Û then Ù .catch. ثبت (Ù
شترک) کرد.
٠تد٠then
Ù
ÙÙ
ترÛÙ Ù Ø§Ø³Ø§Ø³Û ØªØ±Û٠آ٠then. است.
سÛÙØªÚ©Ø³ عبارت است از:
promise.then(
function(result) { /* ÛÚ© ÙØªÛج٠Ù
ÙÙ٠را Ù
Ø¯ÛØ±Ûت Ú©ÙÛØ¯ */ },
function(error) { /* ÛÚ© خطا را Ù
Ø¯ÛØ±Ûت Ú©ÙÛØ¯ */ }
);
اÙÙÛ٠آرگÙÙ
ا٠then. ØªØ§Ø¨Ø¹Û Ø§Ø³Øª ک٠با ØÙâÙÙØµÙ شد٠(resolved) ÛÚ© Promise اجرا Ù
ÛâØ´ÙØ¯ Ù ÙØªÛج٠را Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙØ¯.
آرگÙÙ
ا٠دÙÙ
then. ØªØ§Ø¨Ø¹Û Ø§Ø³Øª ک٠با رد شد٠(rejected) ÛÚ© Promise اجرا Ù
ÛâØ´ÙØ¯ ٠خطا را Ø¯Ø±ÛØ§Ùت Ù
ÛâÚ©ÙØ¯.
ب٠عÙÙØ§Ù Ù Ø«Ø§ÙØ در اÛÙØ¬Ø§ ÛÚ© ÙØ§Ú©ÙØ´ ب٠ÛÚ© Promise ک٠با Ù ÙÙÙÛØª ØÙâÙÙØµÙ شد٠(resolved) دارÛÙ :
let promise = new Promise(function(resolve, reject) {
setTimeout(() => resolve("Ø§ÙØ¬Ø§Ù
شدÙ!"), 1000);
});
// را اجرا Ù
Û Ú©ÙØ¯ .then اÙÙÛ٠تابع در resolve
promise.then(
result => alert(result), // بعد از 1 ثاÙÛÙ "Ø§ÙØ¬Ø§Ù
شدÙ!" را ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯
error => alert(error) // اجرا ÙÙ
ÛâØ´ÙØ¯
);
اÙÙÛ٠تابع اجرا شد.
٠در ØµÙØ±Øª Ø±Ø¯Ø´Ø¯ÙØ تابع دÙÙ :
let promise = new Promise(function(resolve, reject) {
setTimeout(() => reject(new Error("Whoops!")), 1000);
});
// اجرا Ù
Û Ú©ÙØ¯ .then تابع دÙÙ
را در reject
promise.then(
result => alert(result), // اجرا ÙÙ
ÛâØ´ÙØ¯
error => alert(error) // ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯ "Error: Whoops!" بعد از 1 ثاÙÛÙ
);
اگر ÙÙØ· ب٠تکÙ
ÛÙ Ù
ÙÙÙÛØªâØ¢Ù
ÛØ² کار Ø¹ÙØ§Ù٠دارÛÙ
Ø Ù
ÛâØªÙØ§ÙÛÙ
تÙÙØ§ ÛÚ© آرگÙÙ
ا٠تابع را Ø¨Ø±Ø§Û then. ارائ٠کÙÛÙ
:
let promise = new Promise(resolve => {
setTimeout(() => resolve("Ø§ÙØ¬Ø§Ù
شدÙ!"), 1000);
});
promise.then(alert); // بعد از 1 ثاÙÛÙ Â«Ø§ÙØ¬Ø§Ù
شدÙ!» را ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯
٠تد٠catch
اگر ÙÙØ· Ø¨Ù Ø®Ø·Ø§ÙØ§ Ø¹ÙØ§ÙÙâÙ
ÙØ¯ ÙØ³ØªÛÙ
Ø Ù
ÛâØªÙØ§ÙÛÙ
از null ب٠عÙÙØ§Ù اÙÙÛ٠آرگÙÙ
Ø§Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
: then(nullØ errorHandlingFunction).. ÛØ§ Ù
ÛâØªÙØ§ÙÛÙ
از catch(errorHandlingFunction). Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
ک٠دÙÛÙØ§Ù Ù
شاب٠است:
let promise = new Promise((resolve, reject) => {
setTimeout(() => reject(new Error("Whoops!")), 1000);
});
// .catch(f) is the same as promise.then(null, f)
promise.catch(alert); // .را بعد از 1 ثاÙÛÙ ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯ "Error: Whoops!" خطاÛ
ÙØ±Ø§Ø®ÙاÙÛ catch(f). ÛÚ© تشاب٠کاÙ
٠از then(null, f). است. اÛÙ ÙÙØ· ÛÚ© Ú©ÙØªØ§Ù ÙÙÛØ³Û است.
ØªÙ ÛØ²Ú©Ø§Ø±Û: finally
درست Ù
اÙÙØ¯ ÛÚ© Ø¨ÙØ¯ finally در ÛÚ© catch {...} try {...} Ù
عÙ
ÙÙÛØ در ÙØ¹Ø¯ÙâÙØ§(promises) ÙÛØ² finally ÙØ¬Ùد دارد.
ÙØ±Ø§Ø®ÙاÙÛ finally(f). شبÛ٠ب٠then(f, f). است ب٠اÛÙ Ù
Ø¹ÙØ§ Ú©Ù f ÙÙ
ÛØ´Ù زÙ
اÙÛ Ú©Ù Promise تسÙÛÙ (settled) Ù
ÛâØ´ÙØ¯ اجرا Ù
ÛâØ´ÙØ¯: Ø®ÙØ§Ù ØÙâÙÙØµÙ (resolve) ÛØ§ رد (reject) Ø´ÙØ¯.
Ù
تد٠finally ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ø®ÙØ¨ Ø¨Ø±Ø§Û Ø§ÙØ¬Ø§Ù
تÙ
ÛØ²Ú©Ø§Ø±Û استØ
Ø§ÛØ¯Ù finally راÙâØ§ÙØ¯Ø§Ø²Û ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ø¨Ø±Ø§Û Ø§Ø¬Ø±Ø§Û Ù¾Ø§Ú©Ø³Ø§Ø²Û/ÙÙØ§ÛÛâØ³Ø§Ø²Û Ø¨Ø¹Ø¯ از کاÙ
Ùâ Ø´Ø¯Ù عÙ
ÙÛØ§ØªâÙØ§Û ÙØ¨ÙÛ Ø§Ø³Øª.
ب٠عÙÙØ§Ù Ù Ø«Ø§ÙØ ÙØ´Ø§ÙÚ¯Ø±ÙØ§Û Ø¨Ø§Ø±Ú¯ÛØ±Û(loading indicators) Ø®ÙØ¯ را ٠تÙÙÙ Ù ÛâÚ©ÙÛÙ Ø Ø§ØªØµØ§ÙâÙØ§ÛÛ Ú©Ù Ø¯Ûگر ÙÛØ§Ø² ÙÛØ³ØªÙد ÛØ§ Ø¨Ø¨ÙØ¯ÛÙ Ù ØºÛØ±Ù.
ب٠عÙÙØ§Ù ÛÚ© Ù¾Ø§ÛØ§ÙâØ¯ÙÙØ¯Ù Ù Ù٠اÙÛ Ø¨Ù Ø¢Ù Ùکر Ú©ÙÛØ¯. Ù ÙÙ ÙÛØ³Øª Ú©Ù Ù Ù٠اÙÛ Ø®ÙØ¨ ÛØ§ بد Ø¨ÙØ¯ ÛØ§ ÚÙØ¯ Ø¯ÙØ³Øª در Ø¢Ù ØØ¶Ùر Ø¯Ø§Ø´ØªÙØ¯Ø ٠ا ÙÙÙØ² ÙÛØ§Ø² دارÛÙ (ÛØ§ ØØ¯Ø§ÙÙ Ø¨Ø§ÛØ¯) ک٠بعد از Ù Ù٠اÙÛ ØªÙ ÛØ²Ú©Ø§Ø±Û Ø§ÙØ¬Ø§Ù دÙÛÙ .
کد ٠ا ٠٠ک٠است اÛÙÚ¯ÙÙÙ Ø¨ÙØ¸Ø± برسد:
new Promise((resolve, reject) => {
/* را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛØ¯ resolve/reject Ú©Ø§Ø±Û Ø±Ø§ Ø§ÙØ¬Ø§Ù
دÙÛØ¯ ک٠زÙ
ا٠Ù
ÛâØ¨Ø±Ø¯ ٠سپس */
})
// تسÙÛÙ Ø´ÙØ¯Ø Ù
ÙÙ
ÙÛØ³Øª Ù
ÙÙÙÛØªâØ¢Ù
ÛØ² باشد ÛØ§ ÙÙ promise زÙ
اÙÛ Ø§Ø¬Ø±Ø§ Ù
ÛâØ´ÙØ¯ Ú©Ù
.finally(() => تÙÙÙ ÙØ´Ø§ÙÙâگر Ø¨Ø§Ø±Ú¯ÛØ±Û)
// Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ ÙØ´Ø§Ùگر Ø¨Ø§Ø±Ú¯ÛØ±Û ÙÙ
ÛØ´Ù ÙØ¨Ù از پردازش ÙØªÛجÙ/خطا Ù
تÙÙÙ Ù
ÛâØ´ÙØ¯
.then(result => ÙÙ
Ø§ÛØ´ ÙØªÛجÙ, err => ÙÙ
Ø§ÛØ´ خطا)
با اÛÙ ØØ§ÙØ finally(f) دÙÛÙØ§Ù ÙØ§Ù
Ù
ستعار then(f,f) ÙÛØ³Øª.:
ØªÙØ§ÙتâÙØ§Û Ù ÙÙ Û ÙØ¬Ùد Ø¯Ø§Ø±ÙØ¯:
Û±. ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù finally ÙÛÚ Ø¢Ø±Ú¯ÙÙ
اÙÛ ÙØ¯Ø§Ø±Ø¯. در finally Ù
ا ÙÙ
ÛâØ¯Ø§ÙÛÙ
Ú©Ù Ø¢ÛØ§ Promise Ù
ÙÙÙÛØªâØ¢Ù
ÛØ² است ÛØ§ ÙÙ. ÙÙ
Ù ÚÛØ² درست Ø§Ø³ØªØ Ø²ÛØ±Ø§ ÙØ¸ÛÙÙ Ù
ا Ù
عÙ
ÙÙØ§Ù Ø§ÙØ¬Ø§Ù
Ù
راØÙ ÙÙØ§ÛÛâØ³Ø§Ø²Û âØ¹Ù
ÙÙ
Ûâ Ø§Ø³Øª.
ÙØ·Ùا ب٠Ù
Ø«Ø§Ù Ø¨Ø§ÙØ§ ØªÙØ¬Ù Ú©ÙÛØ¯: ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
ÛâØªÙØ§ÙÛØ¯ ببÛÙÛØ¯Ø Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù `finally` آرگÙÙ
اÙÛ ÙØ¯Ø§Ø±Ø¯ Ù ÙØªÛج٠promise ØªÙØ³Ø· Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ø¨Ø¹Ø¯Û Ù
Ø¯ÛØ±Ûت Ù
ÛâØ´ÙØ¯.
Û². ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù finally ÙØªØ§Ûج Ù Ø®Ø·Ø§ÙØ§ را Ø¨Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ù
ÙØ§Ø³Ø¨ Ø¨Ø¹Ø¯Û Â«Ù
ÙØªÙÙ Ù
ÛâÚ©ÙØ¯Â».
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ در اÛÙØ¬Ø§ ÙØªÛج٠از finally ب٠then Ù
ÙØªÙÙ Ù
ÛâØ´ÙØ¯:
```js run
new Promise((resolve, reject) => {
setTimeout(() => resolve("value"), 2000);
})
.finally(() => alert("Promise Ø¢Ù
اد٠است")) // اÛ٠اÙÙ ÙØ¹Ø§Ù Ù
ÛâØ´ÙØ¯
.then(result => alert(result)); // <-- ÙØªÛج٠را ÙÙ
Ø§ÛØ´ Ù
ÛâØ¯ÙØ¯ .then
```
ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ù
ÛâØ¨ÛÙÛØ¯Ø value Ú©Ù ØªÙØ³Ø· اÙÙÛÙ promise Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù شد٠است از طرÛÙ finally ب٠then Ø¨Ø¹Ø¯Û Ù
ÙØªÙ٠شد٠است.
اÛ٠کار Ø¨Ø³ÛØ§Ø± Ù¾Ø³ÙØ¯Ûد٠است ÚÙÙ finally ÙØ±Ø§Ø± ÙÛØ³Øª ÙØªÛج٠ÛÚ© promise را پردازش Ú©ÙØ¯. ÙÙ
Ø§ÙØ·Ùر Ú©Ù Ú¯ÙØªÙ Ø´Ø¯Ø Ø¬Ø§ÛÛ Ø§Ø³Øª ک٠بدÙÙ ØªÙØ¬Ù ب٠اÛÙÚ©Ù ÙØªÛج٠ÚÙ Ø¨ÙØ¯Ø تÙ
ÛØ²Ú©Ø§Ø±Û عÙ
ÙÙ
Û Ø±Ø§ Ø§ÙØ¬Ø§Ù
دÙÛÙ
.
٠اÛÙØ¬Ø§ ÙÙ
Ù
ثاÙÛ Ø§Ø² ÛÚ© خطا دارÛÙ
تا ببÛÙÛÙ
خطا ÚÚ¯ÙÙ٠از finally ب٠catch Ø§ÙØªÙا٠Ù
ÛâÛØ§Ø¨Ø¯:
```js run
new Promise((resolve, reject) => {
throw new Error("خطا");
})
.finally(() => alert("Promise Ø¢Ù
اد٠است")) // اÛ٠اÙÙ ÙØ¹Ø§Ù Ù
ÛâØ´ÙØ¯
.catch(err => alert(err)); // <-- خطا را ÙÙ
Ø§ÛØ´ Ù
ÛâØ¯ÙØ¯ .catch
```
-
ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù
finallyÙØ¨Ø§Ûد ÚÛØ²Û Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯. اگر Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ø Ù ÙØ¯Ø§Ø± Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù شد٠بÛâ Ø³Ø± ٠صدا ÙØ§Ø¯ÛØ¯Ù Ú¯Ø±ÙØªÙ Ù ÛâØ´ÙØ¯.تÙÙØ§ Ø§Ø³ØªØ«ÙØ§ Ø¨Ø±Ø§Û Ø§ÛÙ ÙØ§ÙÙ٠ز٠اÙÛ Ø§Ø³Øª Ú©Ù
finallyÛÚ© خطا پرتاب Ù ÛâÚ©ÙØ¯. سپس اÛ٠خطا Ø¨Ù Ø¬Ø§Û ÙØ± ÙØªÛØ¬Ù ÙØ¨ÙÛ Ø¨Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ø¨Ø¹Ø¯Û Ù ÛâØ±ÙØ¯.
Ø¨Ù Ø·ÙØ± Ø®ÙØ§ØµÙ:
- ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù
finallyÙØªÛØ¬Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù ÙØ¨ÙÛ Ø±Ø§ Ø¯Ø±ÛØ§Ùت ÙÙ ÛâÚ©ÙØ¯ (آرگÙ٠اÙÛ ÙØ¯Ø§Ø±Ø¯). در Ø¹ÙØ¶Ø اÛÙ ÙØªÛØ¬Ù Ø¨Ù Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù Ù ÙØ§Ø³Ø¨ Ø¨Ø¹Ø¯Û Ù ÙØªÙÙ Ù ÛâØ´ÙØ¯. - اگر ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù
finallyÚÛØ²Û Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ø ÙØ§Ø¯ÛØ¯Ù Ú¯Ø±ÙØªÙ Ù ÛâØ´ÙØ¯. - زÙ
اÙÛ Ú©Ù
finallyخطاÛÛ Ø¨Ø±Ú¯Ø±Ø§ÙØ¯Ø سپس Ø§Ø¬Ø±Ø§Û Ø¨Ø±ÙØ§Ù Ù Ø¨Ù ÙØ²Ø¯ÛÚ©âØªØ±ÛÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù خطا Ù ÛâØ±ÙØ¯.
اÛÙ Ø®ÙØ§Øµ Ù
ÙÛØ¯ ÙØ³ØªÙد ٠اگر Ù
ا تعÛÛÙ Ú©ÙÛÙ
Ú©Ù finally در ÙÙØ§Ûت ÚÚ¯ÙÙÙ ÙØ±Ø§Ø± است Ø§Ø³ØªÙØ§Ø¯Ù Ø´ÙØ¯ Ú©Ø§Ø±Û Ù
ÛâÚ©ÙÙØ¯ Ú©Ù ÙÙ
Ù ÚÛØ² Ø¨Ù Ø¯Ø±Ø³ØªÛ Ú©Ø§Ø± Ú©ÙØ¯: Ø¨Ø±Ø§Û Ø±ÙÙØ¯ تÙ
ÛØ²Ú©Ø§Ø±Û عÙ
ÙÙ
Û.
اگر ÛÚ© promise در ØØ§Ùت Ø§ÙØªØ¸Ø§Ø± Ø§Ø³ØªØ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§Û then/catch/finally. Ù
ÙØªØ¸Ø± Ø¢Ù Ù
ÛâÙ
اÙÙØ¯.
گاÙÛ Ø§ÙÙØ§ØªØ ٠٠ک٠است ز٠اÙÛ Ú©Ù Ù Ø§ ÛÚ© Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù ب٠promise اضاÙÙ Ù ÛâÚ©ÙÛÙ Ø Ø§Ø² ÙØ¨Ù تسÙÛ٠شد٠باشد.
در ÚÙÛÙ Ù ÙØ§Ø±Ø¯ÛØ Ø§ÛÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ Ø¨ÙØ§ÙاصÙ٠اجرا Ù ÛâØ´ÙÙØ¯:
// Ø¨ÙØ§ÙاصÙ٠پس از Ø§ÛØ¬Ø§Ø¯ ØÙâÙÙØµÙ Ù
ÛâØ´ÙØ¯ Promise
let promise = new Promise(resolve => resolve("Ø§ÙØ¬Ø§Ù
شدÙ!"));
promise.then(alert); // (ÙÙ
ÛÙ Ø§ÙØ¢Ù ÙØ´Ø§Ù Ù
ÛâØ¯ÙØ¯) Ø§ÙØ¬Ø§Ù
شدÙ!
ØªÙØ¬Ù Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛØ¯ ک٠اÛ٠باعث Ù ÛâØ´ÙØ¯ PromiseÙØ§ ÙØ¯Ø±ØªÙ ÙØ¯ØªØ± از Ø³ÙØ§Ø±ÛÙÛ ÙØ§ÙØ¹Û âÙÙØ±Ø³Øª Ø§Ø´ØªØ±Ø§Ú©â Ø¨Ø§Ø´Ø¯. اگر Ø®ÙØ§ÙÙØ¯Ù ÙØ¨Ùا Ø¢ÙÙÚ¯ Ø®ÙØ¯ را Ù ÙØªØ´Ø± کرد٠باشد ٠سپس Ø´Ø®ØµÛ Ø¯Ø± ÙÛØ³Øª اشتراک ثبت ÙØ§Ù Ú©ÙØ¯Ø Ø§ØØªÙ Ø§ÙØ§Ù آ٠آÙÙÚ¯ را Ø¯Ø±ÛØ§Ùت ÙØ®ÙØ§ÙØ¯ کرد. اشتراک در دÙÛØ§Û ÙØ§ÙØ¹Û Ø¨Ø§ÛØ¯ ÙØ¨Ù از رÙÛØ¯Ø§Ø¯ Ø§ÙØ¬Ø§Ù Ø´ÙØ¯.
Ø§ÙØ¹Ø·Ø§Ù PromiseÙØ§ Ø¨ÛØ´ØªØ± است. ٠ا Ù Û ØªÙØ§ÙÛÙ ÙØ± Ø²Ù Ø§Ù Ú©Ù Ø¨Ø®ÙØ§ÙÛÙ Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ را اضاÙÙ Ú©ÙÛÙ : اگر ÙØªÛج٠از ÙØ¨Ù ÙØ¬Ùد Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ø¢ÙÙØ§ ÙÙØ· اجرا Ù ÛâØ´ÙÙØ¯.
٠ثاÙ: loadScript
در ٠رØÙÙ Ø¨Ø¹Ø¯Ø Ø¨ÛØ§ÛÛØ¯ ÙÙ ÙÙÙâÙØ§Û ع٠ÙÛ Ø¨ÛØ´ØªØ±Û را ببÛÙÛÙ Ú©Ù ÚÚ¯ÙÙÙ PromiseÙØ§ Ù ÛâØªÙØ§ÙÙØ¯ ب٠٠ا در ÙÙØ´ØªÙ کد ÙØ§Ù٠ز٠ا٠ک٠ک Ú©ÙÙØ¯.
Ù
ا تابع loadScript را Ø¨Ø±Ø§Û Ø¨Ø§Ø±Ú¯ÛØ±Û ÛÚ© اسکرÛپت از ÙØµÙ ÙØ¨Ù دارÛÙ
.
اÛÙØ¬Ø§ ÛÚ© ÙÙØ¹ ٠بتÙÛ Ø¨Ø± callback دارÛÙ Ø ÙÙØ· Ø¨Ø±Ø§Û ÛØ§Ø¯Ø¢ÙØ±Û Ø¢Ù:
function loadScript(src, callback) {
let script = document.createElement('script');
script.src = src;
script.onload = () => callback(null, script);
script.onerror = () => callback(new Error(`Ø®Ø·Ø§Û Ø¨Ø§Ø±Ú¯ÛØ±Û اسکرÛپت Ø¨Ø±Ø§Û ${src}`));
document.head.append(script);
}
Ø¨ÛØ§ÛÛØ¯ آ٠را با Ø§Ø³ØªÙØ§Ø¯Ù از PromiseÙØ§ بازÙÙÛØ³Û Ú©ÙÛÙ .
تابع Ø¬Ø¯ÛØ¯ loadScript ÙÛØ§Ø²Û ب٠callback ÙØ®ÙØ§ÙØ¯ داشت. Ø¯Ø±Ø¹ÙØ¶Ø ÛÚ© Ø´Û Promise Ø§ÛØ¬Ø§Ø¯ ٠برÙ
ÛâÚ¯Ø±Ø¯Ø§ÙØ¯ ک٠پس از اتÙ
اÙ
Ø¨Ø§Ø±Ú¯ÛØ±Û ØÙâÙÙØµÙ Ù
ÛâØ´ÙØ¯. کد Ø¨ÛØ±ÙÙÛ Ù
ÛâØªÙØ§Ùد با Ø§Ø³ØªÙØ§Ø¯Ù از then.Ø Ú©ÙØªØ±ÙâÚ©ÙÙØ¯ÙâÙØ§ (ØªÙØ§Ø¨Ø¹ اشتراک) را ب٠آ٠اضاÙÙ Ú©ÙØ¯:
function loadScript(src) {
return new Promise(function(resolve, reject) {
let script = document.createElement('script');
script.src = src;
script.onload = () => resolve(script);
script.onerror = () => reject(new Error(`Ø®Ø·Ø§Û Ø¨Ø§Ø±Ú¯ÛØ±Û اسکرÛپت Ø¨Ø±Ø§Û ${src}`));
document.head.append(script);
});
}
Usage:
let promise = loadScript("https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js");
promise.then(
script => alert(`اسکرÛپت ${script.src} Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø´Ø¯Ù Ø§Ø³Øª!`),
error => alert(`Error: ${error.message}`)
);
promise.then(script => alert('Ú©ÙØªØ±ÙâÚ©ÙÙØ¯Ù دÛگر...'));
٠ا Ù ÛâØªÙØ§ÙÛÙ Ø¨ÙØ§ÙاصÙÙ ÚÙØ¯ Ù Ø²ÛØª را ÙØ³Ø¨Øª ب٠اÙÚ¯ÙÛ Ù Ø¨ØªÙÛ Ø¨Ø± callback Ù Ø´Ø§ÙØ¯Ù Ú©ÙÛÙ :
| Promises | Callbacks |
|---|---|
PromiseÙØ§ ب٠Ù
ا اÛ٠اÙ
کا٠را Ù
ÛâØ¯ÙÙØ¯ Ú©Ù Ú©Ø§Ø±ÙØ§ را Ø¨Ù ØªØ±ØªÛØ¨ Ø·Ø¨ÛØ¹Û Ø§ÙØ¬Ø§Ù
دÙÛÙ
. ابتدا (loadScript(script را اجرا Ù
ÛâÚ©ÙÛÙ
Ù .then Ù
ÛâÙÙÛØ³ÛÙ
ک٠با ÙØªÛج٠ÚÙ Ú©ÙÛÙ
. |
ÙÙگاÙ
ÙØ±Ø§Ø®ÙاÙÛ loadScript(script, callback) Ø¨Ø§ÛØ¯ ÛÚ© تابع callback در Ø§Ø®ØªÛØ§Ø± داشت٠باشÛÙ
. ب٠عبارت دÛÚ¯Ø±Ø ÙØ¨Ù از ÙØ±Ø§Ø®ÙاÙÛ loadScript Ø¨Ø§ÛØ¯ بداÙÛÙ
ک٠با ÙØªÛج٠ÚÙ Ú©ÙÛÙ
. |
Ù
ÛâØªÙØ§ÙÛÙ
.then را در ÛÚ© Promise ÙØ± ÚÙØ¯ بار Ú©Ù Ø¨Ø®ÙØ§ÙÛÙ
ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ
. ÙØ± Ø¨Ø§Ø±Ø ÛÚ© Ø·Ø±ÙØ¯Ø§Ø± Ø¬Ø¯ÛØ¯Ø ÛÚ© تابع اشتراک Ø¬Ø¯ÛØ¯Ø ب٠âÙÛØ³Øª Ø§Ø´ØªØ±Ø§Ú©â Ø§Ø¶Ø§ÙÙ Ù
ÛâÚ©ÙÛÙ
. Ø§Ø·ÙØ§Ø¹Ø§Øª Ø¨ÛØ´ØªØ± در Ù
ÙØ±Ø¯ اÛ٠در ÙØµÙ بعدÛ: Ø²ÙØ¬ÛرÙâØ§Û Ú©Ø±Ø¯Ù Promise. |
ÙÙØ· ÛÚ© کاÙâØ¨Ú© Ù ÛâØªÙØ§Ùد ÙØ¬Ùد داشت٠باشد. |
Ø¨ÙØ§Ø¨Ø±Ø§ÛÙ PromiseÙØ§ Ø¬Ø±ÛØ§Ù کد Ù Ø§ÙØ¹Ø·Ø§ÙâÙ¾Ø°ÛØ±Û Ø¨ÙØªØ±Û ب٠٠ا Ù ÛâØ¯ÙÙØ¯. ا٠ا Ù ÙØ§Ø±Ø¯ Ø¨ÛØ´ØªØ±Û ÙØ¬Ùد دارد. آ٠را در ÙØµÙâÙØ§Û Ø¨Ø¹Ø¯Û Ø®ÙØ§ÙÛÙ Ø¯ÛØ¯.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)