AngularJS嵌套Promise问题从Parent Promise获取信息

时间:2016-11-28 22:14:28

标签: javascript angularjs promise

我有两个$ http.get调用需要发生。

第一个电话获取有关电视节目的基本信息。

第二个电话取决于第一个电话,因为它可以获得有关同一个电视节目剧集的信息。

我的问题是我需要记住'从第二个HTTP GET获得响应时电视节目的ID(从第二个HTTP GET返回的数据不包含原始HTTP GET呼叫的ID)。

这是我提出的解决方案,但似乎有点" hacky"对我来说。我抓住第二个电话的HTTP标头(因为它包含我的ID):



(function () {
  angular.module("ngTvShows")
       .controller("myTvShowsController", function ($http, tvShowFactory, nextEpisodeService, tvShowInfoService) {
          var vm = this;
         
          vm.currentNavItem = "myTvShowsNav";
          vm.myTvShows = tvShowFactory.myTvShows;

          for (var i=0; i<vm.myTvShows.length; i++)
          {
            tvShowInfoService.getTvShowInfo(vm.myTvShows[i].id).then(function (results){
              for (var j=0; j<vm.myTvShows.length; j++)
              {
                if (vm.myTvShows[j].id == results.data.id)
                {
                  vm.myTvShows[j].tvShowInfo = results.data;
                  return nextEpisodeService.episodes(vm.myTvShows[j].id, vm.myTvShows[j].tvShowInfo.number_of_seasons);
                }
              }
            }).then(function (results) {
              // here's where I get the TV show's ID from the header
              var tvId = results.config.url.split("api.themoviedb.org/3/tv/")[1].split("/")[0];
              var index = getTvShowIndex(tvId);
              var today = new Date();
              for (episode of results.data.episodes)
              {
                if (today < new Date(episode.air_date))
                {
                  vm.myTvShows[index].tvShowInfo.nextEpisode = episode.air_date;
                  break;
                }
              }

            });
          }

          function getTvShowIndex (tvId)
          {
            for (var i=0; i<vm.myTvShows.length; i++)
            {
              if (tvId == vm.myTvShows[i].id)
              {
                return i;
              }
            }
            return -1;
          }
       });
})();
&#13;
&#13;
&#13;

我是Angular JS的新手,所以我确信这是一个更优雅的解决方案......我可以接受以下建议:)

0 个答案:

没有答案