Javascript 调用$http以响应另一个http-js

Javascript 调用$http以响应另一个http-js,javascript,angularjs,Javascript,Angularjs,我是新来的。我试图在$http的响应中实现$http 我的问题是,当我调用$http以响应另一个$http时。它不会在视图中显示数据。视图在第二次$http调用之前呈现。我用过承诺,但没有运气。这是我通过稍加修改使用的另一个答案的代码 angular.module('App', []) .controller('Ctrl', function($scope, resultsFactory) { resultsFactory.all().then( function(res){

我是新来的。我试图在$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和名称在视图中正确显示,但它没有显示父名称。我已经调试过了。在渲染视图时,它是未定义的。渲染后,将其值设置为parentname。有人能帮我解决这个问题吗

您重写了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;
});

你重写了你的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;
});

你不应该为此需要延期付款:只要把承诺连成链:

 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;
    });
 });

你不应该为此需要延期付款:只要把承诺连成链:

 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
!您正在使用相同的变量
d
!谢谢丹尼尔,问题也在考虑之中。我刚查过。我没有正确渲染该值。它解决了我的问题谢谢丹尼尔,问题也在考虑之中。我刚查过。我没有正确渲染该值。它解决了我的问题