Щоб пÑодемонÑÑÑÑваÑи викоÑиÑÑÐ°Ð½Ð½Ñ ÐºÐ¾Ð»Ð±ÐµÐºÑв, пÑомÑÑÑв Ñа ÑнÑÐ¸Ñ Ð°Ð±ÑÑÑакÑÐ½Ð¸Ñ Ð¿Ð¾Ð½ÑÑÑ, ми бÑдемо викоÑиÑÑовÑваÑи деÑÐºÑ Ð¼ÐµÑоди бÑаÑзеÑа: зокÑема, заванÑажÑваÑи ÑкÑипÑи Ñа виконÑваÑи пÑоÑÑÑ Ð¼Ð°Ð½ÑпÑлÑÑÑÑ Ð· докÑменÑом.
ЯкÑо ви не Ð·Ð½Ð°Ð¹Ð¾Ð¼Ñ Ð· Ñими меÑодами, Ñ ÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑÐ°Ð½Ð½Ñ Ð² пÑÐ¸ÐºÐ»Ð°Ð´Ð°Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ°Ñ Ð·Ð°Ð¿Ð»ÑÑанÑÑÑÑ, ви можеÑе пÑоÑиÑаÑи кÑлÑка ÑоздÑлÑв з наÑÑÑÐ¿Ð½Ð¾Ñ ÑаÑÑини пÑдÑÑÑника.
ХоÑа ми вÑе одно ÑпÑобÑÑмо вÑе пÑоÑÑниÑи. Ðи бÑдемо викоÑиÑÑовÑваÑи лиÑе пÑоÑÑÑ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑÑ Ð±ÑаÑзеÑа.
СеÑедовиÑа JavaScript пÑопонÑÑÑÑ Ð±Ð°Ð³Ð°Ñо ÑÑнкÑÑй, ÑÐºÑ Ð´Ð¾Ð·Ð²Ð¾Ð»ÑÑÑÑ Ð¿Ð»Ð°Ð½ÑваÑи аÑÐ¸Ð½Ñ ÑÐ¾Ð½Ð½Ñ Ð´ÑÑ. ТобÑо дÑÑ, ÑÐºÑ Ð¼Ð¸ ÑнÑÑÑÑÑмо заÑаз, але ÑÐºÑ Ð²Ð¸ÐºÐ¾Ð½ÑÑÑÑÑÑ Ð¿ÑзнÑÑе.
ÐапÑиклад, однÑÑÑ Ð· ÑакиÑ
ÑÑнкÑÑй Ñ setTimeout.
Рй ÑнÑÑ ÑеалÑÐ½Ñ Ð¿Ñиклади аÑÐ¸Ð½Ñ ÑÐ¾Ð½Ð½Ð¸Ñ Ð´Ñй, напÑиклад заванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑкÑипÑÑв Ñ Ð¼Ð¾Ð´ÑлÑв (ми ÑозглÑнемо ÑÑ Ñ Ð½Ð°ÑÑÑÐ¿Ð½Ð¸Ñ ÑоздÑÐ»Ð°Ñ ).
РозглÑнÑмо ÑÑнкÑÑÑ loadScript(src), Ñка заванÑажÑÑ ÑкÑÐ¸Ð¿Ñ Ñз заданим src:
function loadScript(src) {
// ÑÑвоÑÑÑ Ñег <script> Ñ Ð´Ð¾Ð´Ð°Ñ Ð¹Ð¾Ð³Ð¾ до ÑÑоÑÑнки
// Ñе пÑизводиÑÑ Ð´Ð¾ Ñого, Ñо ÑкÑÐ¸Ð¿Ñ Ñз заданим src поÑÐ¸Ð½Ð°Ñ Ð·Ð°Ð²Ð°Ð½ÑажÑваÑиÑÑ, Ñ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð²Ñн запÑÑкаÑÑÑÑÑ
let script = document.createElement('script');
script.src = src;
document.head.append(script);
}
Ðона вÑÑавлÑÑ Ð² докÑÐ¼ÐµÐ½Ñ Ð½Ð¾Ð²Ð¸Ð¹, динамÑÑно ÑÑвоÑений Ñег <script src="â¦"> Ñз заданим src. ÐÑаÑÐ·ÐµÑ Ð°Ð²ÑомаÑиÑно поÑне заванÑажÑваÑи його Ñ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð¾Ð´ÑÐ°Ð·Ñ Ð¶ запÑÑÑиÑÑ.
Ðи можемо викоÑиÑÑовÑваÑи ÑÑ ÑÑнкÑÑÑ Ñаким Ñином:
// заванÑажÑÑ Ñа виконÑÑ ÑкÑÐ¸Ð¿Ñ Ð·Ð° заданим ÑлÑÑ
ом
loadScript('/my/script.js');
СкÑÐ¸Ð¿Ñ Ð²Ð¸ÐºÐ¾Ð½ÑÑÑÑÑÑ âаÑÐ¸Ð½Ñ Ñонноâ, оÑкÑлÑки заванÑажÑваÑиÑÑ Ð²Ñн поÑÐ¸Ð½Ð°Ñ Ð·Ð°Ñаз, але запÑÑкаÑÑÑÑÑ Ð¿ÑзнÑÑе, коли ÑÑнкÑÑÑ Ð²Ð¶Ðµ завеÑÑиÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ.
ЯкÑо нижÑе loadScript(...) бÑде бÑдÑ-Ñкий код, вÑн не ÑекаÑиме, доки завеÑÑиÑÑÑÑ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑкÑипÑÑ.
loadScript('/my/script.js');
// код нижÑе loadScript
// не ÑÐµÐºÐ°Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑкÑипÑÑ
// ...
СкажÑмо, нам поÑÑÑбно викоÑиÑÑовÑваÑи новий ÑкÑипÑ, Ñк ÑÑлÑки вÑн заванÑажиÑÑÑÑ. ÐÑн оголоÑÑÑ Ð½Ð¾Ð²Ñ ÑÑнкÑÑÑ, Ñ Ð¼Ð¸ Ñ Ð¾Ñемо ÑÑ Ð·Ð°Ð¿ÑÑÑиÑи.
Ðле ÑкÑо ми зÑобимо Ñе вÑдÑÐ°Ð·Ñ Ð¿ÑÑÐ»Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ loadScript(...), Ñе не ÑпÑаÑÑÑ:
loadScript('/my/script.js'); // ÑкÑÐ¸Ð¿Ñ Ð¼ÑÑÑиÑÑ "function newFunction() {â¦}"
newFunction(); // Ð½ÐµÐ¼Ð°Ñ ÑÐ°ÐºÐ¾Ñ ÑÑнкÑÑÑ!
ÐÑиÑодно, бÑаÑзеÑ, ймовÑÑно, не вÑÑиг заванÑажиÑи ÑкÑипÑ. ÐаÑаз ÑÑнкÑÑÑ loadScript не Ð½Ð°Ð´Ð°Ñ Ð¼Ð¾Ð¶Ð»Ð¸Ð²Ð¾ÑÑÑ Ð²ÑдÑÑежÑваÑи завеÑÑÐµÐ½Ð½Ñ Ð·Ð°Ð²Ð°Ð½ÑаженнÑ. СкÑÐ¸Ð¿Ñ Ð¿ÑоÑÑо заванÑажÑÑÑÑÑÑ Ñа зÑеÑÑÐ¾Ñ Ð·Ð°Ð¿ÑÑкаÑÑÑÑÑ, Ñе й вÑе. Ðле ми Ñ
оÑÑли б знаÑи коли Ñе ÑÑанеÑÑÑÑ, Ñоб могÑи пÑÑÐ»Ñ ÑÑого викоÑиÑÑовÑваÑи Ð½Ð¾Ð²Ñ ÑÑнкÑÑÑ Ñа змÑÐ½Ð½Ñ Ð· ÑÑого ÑкÑипÑÑ.
Ðодаймо callback-ÑÑнкÑÑÑ Ñк дÑÑгий аÑгÑÐ¼ÐµÐ½Ñ Ð´Ð¾ loadScript, Ñка Ð¼Ð°Ñ Ð²Ð¸ÐºÐ¾Ð½ÑваÑиÑÑ, коли ÑкÑÐ¸Ð¿Ñ Ð·Ð°Ð²Ð°Ð½ÑажÑÑÑÑÑÑ:
function loadScript(src, callback) {
let script = document.createElement('script');
script.src = src;
script.onload = () => callback(script);
document.head.append(script);
}
ÐодÑÑ onload опиÑана в ÑÑаÑÑÑ ÐаванÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑеÑÑÑÑÑв: onload Ñа onerror. ЯкÑо коÑоÑко, Ñо ÑÑ Ð¿Ð¾Ð´ÑÑ Ð·âÑвлÑÑÑÑÑÑ Ð¿ÑÑÐ»Ñ Ñого, Ñк ÑкÑÐ¸Ð¿Ñ Ð±Ñв заванÑажений Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¸Ð¹.
ТепеÑ, ÑкÑо ми Ñ Ð¾Ñемо викликаÑи Ð½Ð¾Ð²Ñ ÑÑнкÑÑÑ Ð·Ñ ÑкÑипÑÑ, Ñо Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð½Ð°Ð¿Ð¸ÑаÑи Ñе Ñ ÐºÐ¾Ð»Ð±ÐµÐºÑ:
loadScript('/my/script.js', function() {
// колбек запÑÑкаÑÑÑÑÑ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ ÑкÑипÑÑ
newFunction(); // Ñож ÑÐµÐ¿ÐµÑ Ð²Ñе пÑаÑÑÑ
...
});
ÐÐ´ÐµÑ Ñака: дÑÑгий аÑгÑÐ¼ÐµÐ½Ñ â Ñе ÑÑнкÑÑÑ (зазвиÑай анонÑмна), Ñка запÑÑкаÑÑÑÑÑ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð´ÑÑ.
ÐÑÑ Ð¿Ñиклад Ñз ÑеалÑним ÑкÑипÑом, Ñкий можна виконаÑи:
function loadScript(src, callback) {
let script = document.createElement('script');
script.src = src;
script.onload = () => callback(script);
document.head.append(script);
}
loadScript('https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.2.0/lodash.js', script => {
alert(`Cool, the script ${script.src} is loaded`);
alert( _ ); // _ ÑÑнкÑÑÑ, Ñо оголоÑена в заванÑÐ°Ð¶ÐµÐ½Ð¾Ð¼Ñ ÑкÑипÑÑ
});
Такий ÑÑÐ¸Ð»Ñ Ð½Ð°Ð·Ð¸Ð²Ð°ÑÑÑÑÑ âаÑинÑ
Ñонним пÑогÑамÑваннÑм на Ð±Ð°Ð·Ñ ÐºÐ¾Ð»Ð±ÐµÐºÑвâ (âcallback-basedâ). ФÑнкÑÑÑ, Ñка виконÑÑ ÑоÑÑ Ð°ÑинÑ
Ñонно, повинна мÑÑÑиÑи аÑгÑÐ¼ÐµÐ½Ñ callback, де ми запÑÑкаÑмо ÑÑнкÑÑÑ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð°ÑинÑ
ÑÐ¾Ð½Ð½Ð¾Ñ Ð´ÑÑ.
ТÑÑ Ð¼Ð¸ зÑобили Ñе лиÑе в loadScript, але, звиÑайно, Ñе можна зÑобиÑи Ñе в багаÑÑоÑ
мÑÑÑÑÑ
.
Ðолбек Ñ ÐºÐ¾Ð»Ð±ÐµÐºÑ
Як ми можемо заванÑажиÑи два ÑкÑипÑи поÑлÑдовно: ÑпоÑаÑÐºÑ Ð¿ÐµÑÑий, а поÑÑм дÑÑгий пÑÑÐ»Ñ Ð½Ñого?
ÐÑиÑодним ÑÑÑеннÑм бÑло б помÑÑÑиÑи дÑÑгий виклик loadScript ÑÑеÑÐµÐ´Ð¸Ð½Ñ ÐºÐ¾Ð»Ð±ÐµÐºÐ°, напÑиклад:
loadScript('/my/script.js', function(script) {
alert(`ÐÑÑÑо, ${script.src} заванÑаживÑÑ, заванÑажмо Ñе один`);
loadScript('/my/script2.js', function(script) {
alert(`ÐÑÑÑо, дÑÑгий ÑкÑÐ¸Ð¿Ñ Ð·Ð°Ð²Ð°Ð½ÑаживÑÑ`);
});
});
ÐÑÑÐ»Ñ Ð·Ð°Ð²ÐµÑÑÐµÐ½Ð½Ñ Ð·Ð¾Ð²Ð½ÑÑнÑÐ¾Ñ ÑÑнкÑÑÑ loadScript колбек ÑнÑÑÑÑÑ Ð²Ð½ÑÑÑÑÑнÑ.
Ð ÑкÑо ми Ñ Ð¾Ñемо заванÑажиÑи Ñе один ÑкÑипÑâ¦?
loadScript('/my/script.js', function(script) {
loadScript('/my/script2.js', function(script) {
loadScript('/my/script3.js', function(script) {
// ...пÑодовжÑÑÑÑÑÑ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð²ÑÑÑ
ÑкÑипÑÑв
});
});
});
ÐÑже, кожна нова дÑÑ Ð·Ð½Ð°Ñ Ð¾Ð´Ð¸ÑÑÑÑ Ð²ÑеÑÐµÐ´Ð¸Ð½Ñ ÐºÐ¾Ð»Ð±ÐµÐºÐ°. Це добÑе Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ Ð´Ñй, але погано Ð´Ð»Ñ Ð±Ð°Ð³Ð°ÑÑÐ¾Ñ , ÑÐ¾Ð¼Ñ Ð½ÐµÐ·Ð°Ð±Ð°Ñом ми побаÑимо ÑнÑÑ Ð²Ð°ÑÑанÑи.
ÐбÑобка помилок
У виÑÐµÐ½Ð°Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿ÑÐ¸ÐºÐ»Ð°Ð´Ð°Ñ Ð¼Ð¸ не вÑÐ°Ñ Ñвали помилки. Що ÑобиÑи, ÑкÑо заванÑажиÑи ÑкÑÐ¸Ð¿Ñ Ð½Ðµ вдаÑÑÑÑÑ? ÐÐ°Ñ ÐºÐ¾Ð»Ð±ÐµÐº повинен маÑи можливÑÑÑÑ ÑеагÑваÑи на Ñе.
ÐÑÑ Ð¿Ð¾ÐºÑаÑена веÑÑÑÑ 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 hellâ (з англ. колбек-пеклом) або âpyramid of doomâ (з англ. пекелÑÐ½Ð¾Ñ Ð¿ÑÑамÑдоÑ).
âÐÑÑамÑдаâ Ð²ÐºÐ»Ð°Ð´ÐµÐ½Ð¸Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑв зÑоÑÑÐ°Ñ Ð²Ð¿Ñаво з ÐºÐ¾Ð¶Ð½Ð¾Ñ Ð°ÑÐ¸Ð½Ñ ÑÐ¾Ð½Ð½Ð¾Ñ Ð´ÑÑÑ. ÐезабаÑом Ñе Ð²Ð¸Ñ Ð¾Ð´Ð¸ÑÑ Ð·-пÑд конÑÑолÑ.
Ð¢Ð¾Ð¼Ñ Ñей пÑÐ´Ñ Ñд в пÑогÑамÑÐ²Ð°Ð½Ð½Ñ Ð½Ðµ Ñ Ð¾Ð¿ÑималÑним.
Ðи можемо ÑпÑобÑваÑи зменÑиÑи пÑоблемÑ, зÑобивÑи ÐºÐ¾Ð¶Ð½Ñ Ð´ÑÑ Ð¾ÐºÑÐµÐ¼Ð¾Ñ ÑÑнкÑÑÑÑ, напÑиклад:
loadScript('1.js', step1);
function step1(error, script) {
if (error) {
handleError(error);
} else {
// ...
loadScript('2.js', step2);
}
}
function step2(error, script) {
if (error) {
handleError(error);
} else {
// ...
loadScript('3.js', step3);
}
}
function step3(error, script) {
if (error) {
handleError(error);
} else {
// ...пÑодовжÑÑÑÑÑÑ Ð¿ÑÑÐ»Ñ Ð·Ð°Ð²Ð°Ð½ÑÐ°Ð¶ÐµÐ½Ð½Ñ Ð²ÑÑÑ
ÑкÑипÑÑв (*)
}
}
ÐаÑиÑе? Ðод ÑобиÑÑ Ñе Ñаме, Ñ ÑÐµÐ¿ÐµÑ Ð½ÐµÐ¼Ð°Ñ Ð³Ð»Ð¸Ð±Ð¾ÐºÐ¾Ð³Ð¾ вкладеннÑ, ÑÐ¾Ð¼Ñ Ñо ми зÑобили ÐºÐ¾Ð¶Ð½Ñ Ð´ÑÑ Ð¾ÐºÑÐµÐ¼Ð¾Ñ ÑÑнкÑÑÑÑ Ð²ÐµÑÑ Ð½Ñого ÑÑвнÑ.
Це пÑаÑÑÑ, але код виглÑÐ´Ð°Ñ ÑозÑÑваним на ÑаÑÑини. Ðого важко ÑиÑаÑи, Ñ Ð²Ð¸, напевно, помÑÑили, Ñо пÑд ÑÐ°Ñ ÑиÑÐ°Ð½Ð½Ñ Ð¿Ð¾ÑÑÑбно ÑÑÑибаÑи мÑж ÑаÑÑинами. Це незÑÑÑно, оÑобливо ÑкÑо ÑиÑÐ°Ñ Ð½Ðµ знайомий з кодом Ñ Ð½Ðµ знаÑ, Ñо за Ñим ÑлÑдÑÑ.
ÐÑÑм Ñого, вÑÑ ÑÑнкÑÑÑ Ð¿Ñд Ð½Ð°Ð·Ð²Ð¾Ñ step* пÑизнаÑÐµÐ½Ñ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ñазового викоÑиÑÑаннÑ, вони ÑÑвоÑÐµÐ½Ñ Ð»Ð¸Ñе Ð´Ð»Ñ Ñого, Ñоб ÑникнÑÑи âпекелÑÐ½Ð¾Ñ Ð¿ÑÑамÑдиâ. ÐÑÑ
Ñо не збиÑаÑÑÑÑÑ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑваÑи ÑÑ
повÑоÑно за межами ланÑÑжка дÑй. Таким Ñином, ÑÑÑ Ñ Ð´ÐµÑке нагÑÐ¾Ð¼Ð°Ð´Ð¶ÐµÐ½Ð½Ñ Ñ Ð¿ÑоÑÑоÑÑ Ñмен.
Ðи б Ñ Ð¾ÑÑли маÑи ÑоÑÑ ÐºÑаÑе.
Ðа ÑаÑÑÑ, Ñ Ð¹ ÑнÑÑ ÑпоÑоби ÑникнÑÑи ÑÐ°ÐºÐ¸Ñ Ð¿ÑÑамÑд. Ðдин Ñз найкÑаÑÐ¸Ñ ÑпоÑобÑв â викоÑиÑÑовÑваÑи âпÑомÑÑиâ, Ñо опиÑÐ°Ð½Ñ Ð² наÑÑÑÐ¿Ð½Ð¾Ð¼Ñ ÑоздÑлÑ.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)