Ø¨Ø±Ø§Û ÙØ´Ø§Ù Ø¯Ø§Ø¯Ù Ø§Ø³ØªÙØ§Ø¯Ù ÙØ±Ø§Ø®ÙاÙâÙØ§ Ù Ù¾Ø±Ø§Ù ÛØ³âÙØ§ ٠دÛگر Ù ÙØ§ÙÛÙ Ø§ÙØªØ²Ø§Ø¹ÛØ Ø§Ø² Ø¨Ø±Ø®Û Ù ØªØ¯âÙØ§Û Ù Ø±ÙØ±Ú¯Ø± Ø§Ø³ØªÙØ§Ø¯Ù Ø®ÙØ§ÙÛ٠کرد ب٠ÙÛÚÙ Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø§Ø³Ú©Ø±ÛپتâÙØ§ Ù Ø§ÙØ¬Ø§Ù تغÛÛØ±Ø§Øª ساد٠در Ø³ÙØ¯ HTML.
اگر ب٠اÛÙ Ù ØªØ¯ÙØ§ ٠کاربردشا٠در Ù Ø«Ø§Ù ÙØ§ Ø¢Ø´ÙØ§ ÙÛØ³ØªÛد Ø´Ø§ÛØ¯ Ø¨Ø®ÙØ§ÙÛØ¯ ÚÙØ¯ ÙØµÙ از بخش Ø¨Ø¹Ø¯Û Ø¢Ù ÙØ²Ø´ را Ø¨Ø®ÙØ§ÙÛØ¯.
اگرÚÙØ ٠ا Ø³Ø¹Û Ù ÛâÚ©ÙÛÙ ÙÙ Ù ÚÛØ² را ÙØ§Ø¶Ø Ù Ø´ÙØ§Ù Ø¨ÛØ§Ù Ú©ÙÛÙ . از ÙØ¸Ø± بخش Ù Ø±Ø¨ÙØ· Ø¨Ù Ù Ø±ÙØ±Ú¯Ø± ÚÛØ² Ø¨Ø³ÛØ§Ø± Ù¾ÛÚÛØ¯ÙâØ§Û ÙØ¬Ùد ÙØ®ÙØ§ÙØ¯ داشت.
Ø¨Ø³ÛØ§Ø±Û از ØªÙØ§Ø¨Ø¹ ØªÙØ³Ø· Ù ØÛØ·âÙØ§Û Ù ÛØ²Ø¨Ø§Ù Ø¬Ø§ÙØ§Ø§Ø³Ú©Ø±Ûپت ÙØ±Ø§Ù٠شدÙâØ§ÙØ¯ ک٠ب٠ش٠ا اجاز٠٠ÛâØ¯ÙÙØ¯ Ø§ÙØ¯Ø§Ù ات ØºÛØ±Ù٠گا٠را Ø¨Ø±ÙØ§Ù ÙâØ±ÛØ²Û Ú©ÙÛØ¯. ب٠عبارت دÛÚ¯Ø±Ø Ø§ÙØ¯Ø§Ù Ø§ØªÛ Ú©Ù Ø§ÙØ§Ù آغاز Ù ÛâÚ©ÙÛÙ Ø Ø§Ù Ø§ بعدا ت٠ا٠٠ÛâØ´ÙÙØ¯.
ب٠عÙÙØ§Ù Ù
Ø«Ø§ÙØ ÛÚ©Û Ø§Ø² اÛÙ ØªÙØ§Ø¨Ø¹Ø تابع setTimeout است.
٠ثاÙâÙØ§Û ÙØ§ÙØ¹Û Ø¯ÛÚ¯Ø±Û Ø§Ø² Ø§ÙØ¯Ø§Ù ات ØºÛØ±ÙÙ Ú¯Ø§Ù ÙØ¬Ùد Ø¯Ø§Ø±Ø¯Ø Ù Ø§ÙÙØ¯ Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø§Ø³Ú©Ø±ÛپتâÙØ§ ٠٠اÚÙÙâÙØ§ (در ÙØµÙâÙØ§Û Ø¨Ø¹Ø¯Û Ø¯Ø±Ø¨Ø§Ø±Ù Ø¢ÙÙØ§ ØµØØ¨Øª Ø®ÙØ§ÙÛ٠کرد).
ÛÚ© Ùگا٠ب٠تابع loadScript(src) بÛÙØ¯Ø§Ø²Ûد Ú©Ù ÛÚ© اسکرÛÙ¾ØªÛ Ø¨Ø§ src داد٠شد٠را Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ù
ÛâÚ©ÙØ¯.
âââ
function loadScript(src) {
//ÛÚ© تگ اسکرÛپت Ù
ÛâØ³Ø§Ø²Ø¯ ٠آ٠را Ø¨Ù ØµÙØÙ Ø§Ø¶Ø§ÙÙ Ù
ÛâÚ©ÙØ¯
// Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ø´Ø±ÙØ¹ Ø¨Ù Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ú©ÙØ¯ ٠زÙ
اÙÛ Ú©Ù Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ú©Ø§Ù
٠شد اجرا Ø´ÙØ¯ src اÛ٠باعث Ù
ÛâØ´ÙØ¯ اسکرÛپت با
let script = document.createElement("script");
script.src = src;
document.head.append(script);
}
اÛ٠تابع ÛÚ© تگ <script src="...">â Ø±Ø§ Ø¨Ù ØµÙØ±Øª Ù¾ÙÛØ§ Ø§ÛØ¬Ø§Ø¯ Ù
ÛâÚ©ÙØ¯ ٠با src Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ø¨Ù Ø³ÙØ¯ اضاÙÙ Ù
ÛâÚ©ÙØ¯. Ù
Ø±ÙØ±Ú¯Ø± Ø¨Ù Ø·ÙØ± Ø®ÙØ¯Ú©Ø§Ø± Ø´Ø±ÙØ¹ Ø¨Ù Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø¢Ù Ù
ÛâÚ©ÙØ¯ ٠زÙ
اÙÛ Ú©Ù Ú©Ø§Ù
Ù Ø´Ø¯Ø Ø§Ø¬Ø±Ø§ÛØ´ Ù
ÛâÚ©ÙØ¯.
Ù ÛâØªÙØ§ÙÛ٠از اÛ٠تابع Ø¨Ù ØµÙØ±Øª Ø²ÛØ± Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ :
// اسکرÛپت با Ù
Ø³ÛØ± Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ù Ø§Ø¬Ø±Ø§ Ù
ÛâÚ©ÙØ¯
loadScript("/my/script.js");
اسکرÛپت Ø¨Ù ØµÙØ±Øª ØºÛØ±Ù٠گا٠اجرا Ù ÛâØ´ÙØ¯Ø Ø²ÛØ±Ø§ Ø§ÙØ¢Ù Ø´Ø±ÙØ¹ Ø¨Ù Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ù ÛâÚ©ÙØ¯Ø ا٠ا بعدا (ز٠اÙÛâک٠کار تابع ت٠ا٠شدÙ)Ø Ø§Ø¬Ø±Ø§ Ù ÛâØ´ÙØ¯.
اگر Ú©Ø¯Û Ø¨Ø¹Ø¯ از ââloadScript(...)â ÙØ¬Ùد Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´Ø¯Ø Ù
ÙØªØ¸Ø± Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ú©Ø§Ù
٠اسکرÛپت ÙÙ
ÛâÙ
Ø§ÙØ¯.
loadScript("/my/script");
// loadScript Ú©Ø¯ÙØ§Û پس از تابع
// Ù
ÙØªØ¸Ø± Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ú©Ø§Ù
٠اسکرÛپت ÙÙ
ÛâÙ
Ø§ÙØ¯
// ...
ÙØ±Ø¶ Ú©ÙÛØ¯ ÙÛØ§Ø² دارÛÙ Ø¨ÙØ§ÙاصÙ٠بعد از Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø§Ø³Ú©Ø±Ûپت Ø¬Ø¯ÛØ¯ از Ø¢Ù Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ . آ٠اسکرÛپت ØªÙØ§Ø¨Ø¹ Ø¬Ø¯ÛØ¯Û Ø§Ø¹ÙØ§Ù Ù ÛâÚ©ÙØ¯ ٠٠ا Ù ÛâØ®ÙØ§ÙÛ٠آÙâÙØ§ را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ .
اÙ
ا اگر اÛ٠کار را ÙÙØ±Ø§ بعد از صدا زد٠ââloadScript(...)â Ø§ÙجاÙ
دÙÛÙ
کار ÙØ®ÙØ§ÙØ¯ کرد.
loadScript("/my/script.js"); // است function newFunction() {...} شاÙ
Ù
newFunction();
Ø§ØØªÙ
Ø§ÙØ§Ù Ù
Ø±ÙØ±Ú¯Ø± زÙ
Ø§Ù ÙØ§Ø²Ù
Ø¨Ø±Ø§Û Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø§Ø³Ú©Ø±Ûپت را ÙØ¯Ø§Ø´ØªÙ است. در ØØ§Ù ØØ§Ø¶Ø±Ø تابع loadScript راÙÛ Ø¨Ø±Ø§Û Ø±Ø¯ÛØ§Ø¨Û اتÙ
اÙ
Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û ÙØ±Ø§ÙÙ
ÙÙ
ÛâÚ©ÙØ¯. اسکرÛپت Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ù
ÛâØ´ÙØ¯ ٠در ÙÙØ§Ûت اجرا Ù
ÛâØ´ÙØ¯Ø ÙÙ
ÛÙ. اÙ
ا Ù
ا Ù
ÛâØ®ÙØ§ÙÛÙ
بداÙÛÙ
Ú٠زÙ
اÙÛ Ø§ÛÙ Ø§ØªÙØ§Ù Ù
ÛâØ§ÙØªØ¯ تا Ø¨ØªÙØ§ÙÛÙ
از ØªÙØ§Ø¨Ø¹ Ù Ù
ØªØºÛØ±ÙØ§Û Ø¬Ø¯ÛØ¯ آ٠اسکرÛپت Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛÙ
.
Ø¨ÛØ§ÛÛØ¯ ب٠عÙÙØ§Ù آرگÙÙ
ا٠دÙÙ
loadScript ÛÚ© تابع callback اضاÙÙ Ú©ÙÛÙ
ک٠زÙ
اÙÛ Ú©Ù Ø§Ø³Ú©Ø±Ûپت Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø´Ø¯Ø Ø§Ø¬Ø±Ø§ Ø´ÙØ¯:
function leadScript(src, callback) {
let script = document.createElement("script");
script.src = src;
script.onload = () => callback(script);
document.head.append(script);
}
رÙÛØ¯Ø§Ø¯ onload در Ù
ÙØ§ÙÙ Resource loading: onload and onerror ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ø´Ø¯Ù Ø§Ø³ØªØ Ø¯Ø±ÙØ§Ùع اÛ٠رÙÛØ¯Ø§Ø¯ ØªØ§Ø¨Ø¹Û Ø±Ø§ بعد از اÛÙک٠اسکرÛپت Ø¨Ø§Ø±Ú¯ÛØ±Û ٠اجرا Ø´Ø¯Ø Ø§Ø¬Ø±Ø§ Ù
ÛâÚ©ÙØ¯.
ØØ§Ùا اگر Ø¨Ø®ÙØ§ÙÛ٠تابعâÙØ§Û Ø¬Ø¯ÛØ¯Û از اسکرÛپت را ÙØ±Ø§Ø®ÙاÙÛ Ú©ÙÛÙ Ø Ø¨Ø§ÛØ¯ آ٠را در callback بÙÙÛØ³ÛÙ :
loadScript('/my/script.js', function() {
// بعد از اÛÙک٠اسکرÛپت Ø¨Ø§Ø±Ú¯ÛØ±Û Ø´Ø¯Ø Ø§Ø¬Ø±Ø§ Ù
ÛâØ´ÙØ¯ callback اÛÙ
newFunction(); // ØØ§Ùا کار Ù
ÛâÚ©ÙØ¯
...
});
Ø§ÛØ¯Ù اÛ٠است: آرگÙ٠ا٠دÙÙ ÛÚ© تابع است (٠ع٠ÙÙØ§Ù ÙØ§Ø´Ùاس) ک٠ز٠اÙÛ Ú©Ù Ø¹Ù ÙÛØ§Øª Ú©Ø§Ù Ù Ø´Ø¯Ø Ø§Ø¬Ø±Ø§ Ù ÛâØ´ÙØ¯.
اÛÙâÙÙ ÛÚ© Ù Ø«Ø§Ù ÙØ§Ø¨Ù اجرا با ÛÚ© اسکرÛپت ÙØ§ÙعÛ:
function loadScript(src, callback) {
let script = document.createElement("script");
script.src = src;
script.onload = () => callback(script);
document.head.append(script);
}
leadScript("https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.2.0/lodash.js", () => {
alert(`اسکرÛپت ${script.src} Ø¨Ø§Ø±Ú¯ÛØ±Û شد`);
alert( _ ); // ÛÚ© تابع تعرÛ٠شد٠در اسکرÛپت Ø¨Ø§Ø±Ú¯ÛØ±Û شد٠است _
});
اÛÙ âØ³Ø¨Ú© Ø¨Ø±ÙØ§Ù
ÙâÙÙÛØ³Û ØºÛØ±ÙÙ
گاÙ
Ù
بتÙÛ Ø¨Ø± callbackâ ÙØ§Ù
ÛØ¯Ù Ù
ÛâØ´ÙØ¯. ÛÚ© تابع Ú©Ù Ú©Ø§Ø±Û Ø±Ø§ Ø¨Ù ØµÙØ±Øª ØºÛØ±ÙÙ
گاÙ
Ø§ÙØ¬Ø§Ù
Ù
ÛâØ¯ÙØ¯Ø Ø¨Ø§ÛØ¯ آرگÙÙ
ا٠callback Ø¯Ø±ÛØ§Ùت Ú©ÙØ¯ Ú©Ù ØªØ§Ø¨Ø¹Û Ø±Ø§ ک٠بعد از اتÙ
اÙ
کار اجرا Ø´ÙØ¯Ø در Ø¢Ù ÙØ±Ø§Ø± دÙÛÙ
.
در اÛÙØ¬Ø§ Ù
ا اÛ٠عÙ
٠را در loadScript Ø§ÙØ¬Ø§Ù
دادÛÙ
Ø Ø§Ù
ا Ø§ÙØ¨ØªÙ اÛÙ ÛÚ© رÙÛکرد Ú©ÙÛ Ø§Ø³Øª.
ÙØ±Ø§Ø®Ùا٠در ÙØ±Ø§Ø®ÙاÙ
ÚÚ¯ÙÙÙ Ù ÛâØªÙØ§ÙÛ٠د٠اسکرÛپت را Ø¨Ù ØªØ±ØªÛØ¨ Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ú©ÙÛÙ : اÙ٠اسکرÛپت اÙ٠٠بعد از آ٠اسکرÛپت دÙÙ Ø
را٠ØÙ Ø·Ø¨ÛØ¹ÛØ ÙØ±Ø§Ø± داد٠تابع دÙÙ
loadScript درÙÙ callback اÙÙ Ø§Ø³ØªØ Ù
اÙÙØ¯ اÛÙ:
loadScript("/my/script.js" , function(script) {
alert(`عاÙÛØ ${script.src} Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø´Ø¯Ø ØØ§Ùا ÛÚ©Û Ø¯Ûگر را Ø¨Ø§Ø±Ú¯ÛØ±Û Ù
ÛâÚ©ÙÛÙ
`);
loadScript("/my/script2.js", function(script) {
alert(`عاÙÛØ اسکرÛپت دÙÙ
Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø´Ø¯`);
});
});
ÙÙØªÛ تابع Ø¨ÛØ±ÙÙÛ loadScript تÙ
اÙ
Ø´Ø¯Ø callback آ٠تابع درÙÙÛ Ø±Ø§ Ø´Ø±ÙØ¹ Ù
ÛâÚ©ÙØ¯.
اگر ÛÚ© اسکرÛپت دÛگر ÙÙ Ø¨Ø®ÙØ§ÙÛÙ ÚØ·ÙرØ
loadScript("/my/script.js", function(script) {
loadScript("/my/script2.js", function(script) {
loadScript("/my/script3.js", function(script) {
// ...اداÙ
٠کار بعد از Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û ÙÙ
٠اسکرÛپتâÙØ§
});
});
});
Ù¾Ø³Ø ÙØ± Ø¹Ù Ù Ø¬Ø¯ÛØ¯Û درÙÙ ÛÚ© callback ÙØ±Ø§Ø± دارد. اÛÙ Ø¨Ø±Ø§Û ÚÙØ¯ ع٠ÙÛØ§Øª Ú©ÙÚÚ© Ù ÙØ§Ø³Ø¨ Ø§Ø³ØªØ Ø§Ù Ø§ Ø¨Ø±Ø§Û ØªØ¹Ø¯Ø§Ø¯ Ø²ÛØ§Ø¯ ع٠ÙÛØ§Øª Ø®ÙØ¨ ÙÛØ³Øª. Ø¨Ù Ø²ÙØ¯Û Ø±ÙØ´âÙØ§Û دÛÚ¯Ø±Û Ø±Ø§ ÙÙ Ø®ÙØ§ÙÛÙ Ø¯ÛØ¯.
Ù Ø¯ÛØ±Ûت Ø®Ø·Ø§ÙØ§
در Ù Ø«Ø§Ù ÙØ§Û Ø¨Ø§ÙØ§ ÙÛÚ Ø®Ø·Ø§ÛÛ Ø±Ø§ در ÙØ¸Ø± ÙÚ¯Ø±ÙØªÙ Ø¨ÙØ¯ÛÙ . اگر Ø¨Ø§Ø±Ú¯ÛØ±Û با Ù Ø´Ú©Ù Ù ÙØ§Ø¬Ù Ø´ÙØ¯ ÚÙ Ù ÛâØ´ÙØ¯Ø callback ÙØ§Û ٠ا Ø¨Ø§ÛØ¯ Ø¨ØªÙØ§ÙÙØ¯ ÙØ³Ø¨Øª Ø¨Ù Ø¢Ù ÙØ§Ú©ÙØ´ ÙØ´Ø§Ù بدÙÙØ¯.
اÛÙ ÙØ³Ø®Ù Ø¨ÙØ¨Ùد ÛØ§Ùت٠loadScript است Ú©Ù Ø®Ø·Ø§ÙØ§Û Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ø±Ø§ Ø±Ø¯ÛØ§Ø¨Û Ù
ÛâÚ©ÙØ¯:
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);
}
در ØµÙØ±Øª Ø¨Ø§Ø±Ú¯Ø°Ø§Ø±Û Ù
ÙÙÙ callback(null, script) ٠در ØºÛØ± اÛÙ ØµÙØ±Øª callback(error) صدا زد٠Ù
ÛâØ´ÙØ¯.
ب٠اÛÙ ØµÙØ±Øª Ø§Ø³ØªÙØ§Ø¯Ù Ù ÛâØ´ÙØ¯:
loadScript("/my/script.js", function(error, script) {
if (error) {
// Ù
Ø¯ÛØ±Ûت Ø®Ø·Ø§ÙØ§
}else {
// اسکرÛپت با Ù
ÙÙÙÛØª Ø¨Ø§Ø±Ú¯ÛØ±Û شد٠است
}
});
ÛÚ© بار دÛÚ¯Ø±Ø Ø§ÙÚ¯ÙÛÛ Ú©Ù Ø¨Ø±Ø§Û loadScript Ø§Ø³ØªÙØ§Ø¯Ù کردÛÙ
Ø Ø¯Ø± ÙØ§Ùع کاÙ
ÙØ§Ù Ø±Ø§ÛØ¬ است. ب٠آ٠âerror-first callbackâ Ù
ÛâÚ¯ÙÛÙØ¯.
ÙØ±Ø§Ø±Ø¯Ø§Ø¯ اÛ٠است:
- آرگÙÙ
ا٠اÙÙ
callbackØ¨Ø±Ø§Û Ø®Ø·Ø§ در ØµÙØ±Øª Ø¨Ø±ÙØ² اختصاص داد٠شد٠است. سپسcallback(err)صدا زد٠٠ÛâØ´ÙØ¯. - آرگÙÙ
ا٠دÙÙ
(٠آرگÙÙ
اÙâÙØ§Û Ø¨Ø¹Ø¯Û Ø§Ú¯Ø± ÙØ§Ø²Ù
باشد) Ø¨Ø±Ø§Û ÙØªÛج٠Ù
ÙÙÙÛØªâØ¢Ù
ÛØ² ÙØ³ØªÙد. سپس
callback(null, result1, result2...)صدا زد٠٠ÛâØ´ÙØ¯.
پس ÛÚ© تابع callback ÙØ§ØØ¯ ÙÙ
Ø¨Ø±Ø§Û Ú¯Ø²Ø§Ø±Ø´ خطا Ù ÙÙ
Ø¨Ø±Ø§Û Ø¨Ø±Ú¯Ø±Ø¯Ø§ÙØ¯Ù ÙØªØ§Ûج Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâØ´ÙØ¯.
ÙØ±Ù Ù ØµÛØ¨Øªâبار
در Ùگا٠اÙÙØ Ø¨Ù ÙØ¸Ø± Ù ÛâØ±Ø³Ø¯ رÙÛکرد ÙØ§Ø¨Ù ÙØ¨ÙÙÛ Ø¨Ø±Ø§Û Ú©Ø¯ÙÙÛØ³Û ØºÛØ±Ù٠گا٠باشد. ٠در ÙØ§Ùع ÙÙ ÙØ³Øª. Ø¨Ø±Ø§Û ÛÚ© ÛØ§ Ø´Ø§ÛØ¯ Ø¯Ù ØªÙØ¯Ø±ØªÙÛÛ Ø®ÙØ¨ Ø¨Ù ÙØ¸Ø± Ù ÛâØ±Ø³Ø¯.
ا٠ا Ø¨Ø±Ø§Û ÚÙØ¯ÛÙ Ø¹Ù Ù ØºÛØ±Ù٠گا٠ک٠پشت سر Ù٠اجرا Ù ÛâØ´ÙÙØ¯Ø Ú©Ø¯Û Ø´Ø¨Û٠اÛÙ Ø®ÙØ§ÙÛ٠داشت:
loadScript("1.js", function(error, script) {
if(error) {
handleError(error);
}else {
//...
loadScript("2.js", function(error, script) {
if(error) {
handleError(error);
}else {
//...
loadScript("3.js", function(error, script) {
if(error) {
handleError(error);
}else {
//... تا زÙ
اÙÛ Ú©Ù ÙÙ
٠اسکرÛپت ÙØ§ Ø¨Ø§Ø±Ú¯ÛØ±Û Ø´ÙÙØ¯ اداÙ
٠داد
}
});
}
});
}
});
در کد Ø¨Ø§ÙØ§ دارÛÙ :
1.jsرا Ø¨Ø§Ø±Ú¯ÛØ±Û Ù ÛâÚ©ÙÛ٠سپس اگر خطاÛÛ ÙØ¨Ùد2.jsرا Ø¨Ø§Ø±Ú¯ÛØ±Û Ù ÛâÚ©ÙÛ٠سپس اگر خطاÛÛ ÙØ¨Ùد3.jsرا Ø¨Ø§Ø±Ú¯ÛØ±Û Ù ÛâÚ©ÙÛ٠سپس اگر خطاÛÛ ÙØ¨Ùد â کار دÛÚ¯Ø±Û Ø§ÙØ¬Ø§Ù Ù ÛâØ¯ÙÛÙ(*)
ÙØ±ÚÙ ØªÙØ¯Ø±ØªÙÛÛâÙØ§ Ø¨ÛØ´ØªØ± Ø´ÙØ¯Ø کد عÙ
ÛÙâØªØ± Ù
ÛâØ´ÙØ¯ Ù Ù
Ø¯ÛØ±Ûت Ø¢Ù Ø³Ø®ØªâØªØ± Ù
ÛâØ´ÙØ¯Ø ب٠ÙÛÚ٠اگر Ø¨Ù Ø¬Ø§Û ... کد ÙØ§ÙØ¹Û Ø¯Ø§Ø´ØªÙ Ø¨Ø§Ø´ÛÙ
ک٠شاÙ
Ù ØÙÙÙâÙØ§Ø شرطÛâÙØ§ Ù â¦ Ø¨ÛØ´ØªØ±Û باشد.
گاÙÛ Ø§ÙÙØ§Øª ب٠اÛÙ âØ¬ÙÙÙ callback (callback hell)â ÛØ§ âÙØ±Ù Ù ØµÛØ¨Øªâبار (pyramid of doom)â Ù ÛâÚ¯ÙÛÙØ¯.
âÙØ±Ù â ØªÙدرتÙÛÛâÙØ§ با ÙØ± Ø¹Ù Ù ØºÛØ±ÙÙ Ú¯Ø§Ù Ø¬Ø¯ÛØ¯ ب٠س٠ت راست رشد Ù ÛâÚ©ÙØ¯. Ø¨Ù Ø²ÙØ¯Û Ú©ÙØªØ±Ù آ٠از دست Ù ÛâØ±ÙØ¯.
پس اÛÙ Ø±ÙØ´ کدÙÙÛØ³Û Ø®ÛÙÛ Ø®ÙØ¨ ÙÛØ³Øª.
Ù ÛâØªÙØ§ÙÛÙ ØªÙØ§Ø´ Ú©ÙÛ٠٠شک٠را با تبدÛÙ ÙØ± ع٠٠ب٠ÛÚ© تابع ٠ستÙÙØ Ù Ø«Ù Ø²ÛØ± ÙØ§Ø¨Ù Ú©ÙØªØ±Ù Ú©ÙÛÙ :
loadScript("1.js", step1);
function step1(error, script) {
if(error) {
handleError(error);
}else {
//...
loadScript("2.js", step2);
}
}
function step3(error, script) {
if(error) {
handleError(error);
}else {
//...
loadScript("3.js", step3);
}
}
function step3(error, script) {
if(error) {
handleError(error);
}else {
//... تا زÙ
اÙÛ Ú©Ù ÙÙ
٠اسکرÛپت ÙØ§ Ø¨Ø§Ø±Ú¯ÛØ±Û Ø´ÙÙØ¯ اداÙ
٠داد
}
}
ÙÙ Ø§ÙØ·Ùر Ú©Ù Ù Ø´Ø§ÙØ¯Ù Ù ÛâÚ©ÙÛØ¯ ÙØªÛج٠تغÛÛØ±Û Ùکرد ÙÙÛ Ø§Ø² ØªÙØ¯Ø±ØªÙ Ø¨ÙØ¯Ù callback ÙØ§ با تعرÛÙ Ú©Ø±Ø¯Ù ØªÙØ§Ø¨Ø¹ Ø¨Ù ØµÙØ±Øª جداگاÙÙ Ø¨Ø±Ø§Û ÙØ± ٠رØÙÙØ از ØªÙØ¯Ø±ØªÙ Ø¨ÙØ¯Ù ع٠Û٠جÙÙÚ¯ÛØ±Û کردÛÙ .
اÛÙ Ø±ÙØ´ کار Ù ÛâÚ©ÙØ¯ ÙÙÛ Ú©Ø¯Ø´ تک٠تک٠٠جدا از Ù٠است. Ø®ÙØ§ÙØ¯Ù Ø¢Ù Ø¯Ø´ÙØ§Ø±ØªØ± است Ù Ø§ØØªÙ Ø§ÙØ§ Ù ØªÙØ¬Ù Ø´Ø¯ÛØ¯ Ú©Ù ÙØ§Ø²Ù است در ØÛÙ Ø®ÙØ§Ùد٠از جاÛÛ Ø¨Ù Ø¬Ø§Û Ø¯Ûگر Ø¨Ù¾Ø±ÛØ¯. اÛÙÚ¯ÙÙÙ Ø§ØµÙØ§ Ù ÙØ§Ø³Ø¨ ÙÛØ³Øª Ù Ø®ØµÙØµØ§ اگر ب٠کد Ø¢Ø´ÙØ§ ÙØ¨Ø§Ø´Ûد Ù ÙØ¯Ø§ÙÛØ¯ Ø¨Ø±Ø§Û Ø§Ø¯Ø§Ù Ù Ø¨Ø§ÛØ¯ کجا Û Ú©Ø¯ را Ø¨Ø®ÙØ§ÙÛØ¯.
ÙÙ
ÚÙÛÙ ØªÙØ§Ø¨Ø¹Ù step*â ÙÙØ· Ûکبار Ø§Ø³ØªÙØ§Ø¯Ù Ù
ÛâØ´ÙÙØ¯ Ù ÙÙØ· Ø¨Ø±Ø§Û Ø§Ø¬ØªÙØ§Ø¨ از âÙØ±Ù
Ù
ØµÛØ¨ØªâØ¨Ø§Ø±â Ø§Ûجاد شدÙâØ§ÙØ¯. ک٠باعث Ø¨Û ÙØ¸Ù
Û Ø²ÛØ§Ø¯Û در کد Ù
ÛâØ´ÙÙØ¯.
٠ا Ù ÛâØ®ÙØ§ÙÛÙ ÚÛØ² Ø¨ÙØªØ±Û داشت٠باشÛÙ .
Ø®ÙØ´Ø¨Ø®ØªØ§Ù٠راÙâÙØ§Û دÛÚ¯Ø±Û Ø¨Ø±Ø§Û Ø§Ø¬ØªÙØ§Ø¨ از اÛÙ ÙØ±Ù âÙØ§ ÙØ¬Ùد دارد. ÛÚ©Û Ø§Ø² Ø¨ÙØªØ±Û٠راÙâÙØ§ Ø§Ø³ØªÙØ§Ø¯Ù از âpromiseâ Ø§Ø³Øª ک٠در ÙØµÙ بعد ØªÙØ¶ÛØ Ø¯Ø§Ø¯Ù Ù ÛâØ´ÙØ¯.
ÙØ¸Ø±Ø§Øª
<code>Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯Ø Ø¨Ø±Ø§Û ÚÙØ¯Û٠خط â کد را درÙ٠تگ<pre>ÙØ±Ø§Ø± دÙÛØ¯Ø Ø¨Ø±Ø§Û Ø¨ÛØ´ از د٠خط کد â Ø§Ø² ÛÚ© جعبÙÙ Ø´ÙÛ Ø§Ø³ØªÙØ§Ø¯Ù Ú©ÙÛØ¯. (plnkrØ jsbinØ codepenâ¦)