调用$http以响应另一个HTTP - Angular JS

call $http in response of another http - angular js

本文关键字:HTTP Angular JS 另一个 响应 http 调用      更新时间:2023-09-26

我是角度JS的新手。我试图在$http的回应中实施$http。

我的问题是,当我打电话给$http以回应$http时。它不显示查看的数据。视图在第二次$http调用之前呈现。我用过承诺,但没有运气。这是我通过稍微更改使用的其他答案中的代码。

angular.module('App', [])
.controller('Ctrl', function($scope, resultsFactory) {
  resultsFactory.all().then(
    function(res){
      $scope.results = res;
    },
    function(err){
      console.error(err);
    }
  );
})
.factory('resultsFactory', function($http, $timeout, $q) { 
  var results = {};  
  function _all(){
    var d = $q.defer();
     $http({
       url: url,
       method: 'POST'
     }).then(function (response) {
        var f = {};
        f.id = response.data.id;
        f.name = response.data.name;
        $http({
           url: url,
           data: "id="+response.data.parent_id,
           method: 'POST'
        }).then(function (response1) {
               f.parentname = response1.name;
               d.resolve(f);
        });
     });
    return d.promise;       
  }
  results.all = _all;
  return results;
});

ID 和名称在视图中正确显示,但父名称不显示任何内容。我已经调试了它。它在呈现视图时未定义。渲染后,将其值设置为父名。任何人都可以帮助我解决这个问题吗?

你不应该为此需要延迟:只需链接承诺:

 return $http({
   url: url,
   method: 'POST'
 }).then(function (response) {
    var data = {};
    data.id = response.data.id;
    data.name = response.data.name;
    return $http({
       url: url,
       data: "id="+response.data.parent_id,
       method: 'POST'
    }).then(function (response1) {
           data.parentname = response1.name;
           return data;
    });
 });

你覆盖了你的 d 变量...

.factory('resultsFactory', function ($http, $timeout, $q) {
    var results = {};
    function _all() {
        var d = $q.defer();
        $http({
            url : url,
            method : 'POST'
        }).then(function (response) {
            var secondD = {};
            secondD.id = response.data.id;
            secondD.name = response.data.name;
            $http({
                url : url,
                data : "id=" + response.data.parent_id,
                method : 'POST'
            }).then(function (response1) {
                secondD.parentname = response1.name;
                secondD.resolve(d);
            });
        });
        return d.promise;
    }
    results.all = _all;
    return results;
});