#javascript #asynchronous #promise
#javascript #асинхронный #обещание
Вопрос:
У меня есть функция для загрузки нескольких скриптов в JavaScript. Скрипты загружаются без проблем, но консоль выдает «Uncaught ReferenceError: разрешение не определено» в строке .done(resolve('All scripts were loaded'))
при запуске loadModules().
Я только начал изучать асинхронные функции и нахожусь в растерянности, поэтому был бы признателен за помощь.
Мой код
/*Loads several scripts*/
function loadModules() {
return new Promise((resolve,reject)=>{
jQuery.loadScript("js/script1.js");
jQuery.loadScript("js/script2.js");
})
.done(resolve('All scripts were loaded'))
.fail(reject);
}
/*Loads a single script*/
jQuery.loadScript = function (url) {
return new Promise((resolve,reject)=>{
jQuery.ajax({
url: url,
dataType: 'script',
async: true
})
.done(resolve('Script loaded'))
.fail(reject);
})
}
Комментарии:
1. Попробуйте добавить функцию к событию done:
.done(_ => resolve('Script loaded'))
Ответ №1:
resolve
и reject
будут доступны только внутри закрытия. Вы пытаетесь использовать их вне его. Вы могли бы сделать что-то вроде
return new Promise((resolve, reject) => {
Promise.all([
// load scripts
])
.then(resolve)
.catch(reject);
})
Комментарии:
1. Совет:
Promise.all
уже возвращает обещание. Не оборачивайте его сnew Promise
помощью . Простоreturn Promise.all([ ... ]);