Дождитесь обещаний внутри цикла перед возвратом [дубликат]

avatar
Henrik S
8 апреля 2018 в 08:13
41
1
0

У меня возникли проблемы с тем, чтобы мой код работал так, как я хочу.

Я хочу перебрать все мои вновь созданные объекты из массива movieList после выполнения внешнего "getJSON". Но я вижу, что массив пуст, когда я перебираю его.

Можно ли как-нибудь заставить это решение работать?

   var url = "https://api.themoviedb.org/3/movie/popular?api_key=2c2a6a5ed606126f48db4cdbca91c0f0&language=en-US&page=1";
   var genreUrl = "https://api.themoviedb.org/3/genre/movie/list?api_key=2c2a6a5ed606126f48db4cdbca91c0f0&language=en-US";

$.getJSON(url).then(function(movies){
            var movieList = [];

       movies.results.forEach(function(movie){

            /* Get the genere names for single movie */
           $.getJSON(genreUrl).then(function(genresHolder){
                var genreNames = [];

               //Pushes some info to the array

                return genreNames;
            }).then(function(genres){
               movieList.push(new Movie(movie.id,movie.original_title,genres,movie.poster_path,movie.vote_count,movie.vote_average,movie.release_date));
           })
            counter++;
        })
          return movieList;

   }).then(function (movieList){

       movieList.forEach(function(movie){
           //Appending each movie to html page
       }) 
   }).catch(function(err){
       console.log(err)
   })
Источник

Ответы (1)

avatar
SirPeople
8 апреля 2018 в 08:19
0

Ну, без подробностей о том, что делает getJSON, трудно сказать. Но ваш код должен работать. НО, скорее всего, вы разрешаете getJSON, не возвращая результат из URL-адреса.

В промисе вы можете просто resolve() или resolve(value), все, что передается в вызове, будет отправлено в функцию then(...).

Я не вижу другой очевидной ошибки, в этом случае асинхронные вызовы будут вызываться ТОЛЬКО после выполнения промиса.

Henrik S
8 апреля 2018 в 08:37
0

Извините, я добавил два URL-адреса, с которыми я работаю. в чем разница между использованием "resolve()" и "return"? как я вижу, возврат также передается следующему .then()?