Разрешение не определено при загрузке скрипта

#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([ ... ]);