Angular JS承诺使用$ http - 循环返回数据

时间:2017-07-23 14:59:32

标签: javascript angularjs angular-promise

我使用angular $ http从数据库中获取一些数据。我可以成功获取数据,但在我向前端的用户显示数据之前,我想循环访问数据并进行一些更改。

extension SKNode {

    /// Find point in node relative to it's containing SKView
    /// so that it can be further converted relative to other views.
    func pointInContainingView(_ point:CGPoint) -> (SKView, CGPoint)? {

        guard let scene = scene, let view = scene.view else {
            return nil
        }
        let pointInView.convertPoint(toView: convert(point,toNode:scene))
        return (view, pointInView)
    }
}

我的循环功能:

$http.get("/getList").then(function(data  ̶,̶ ̶s̶t̶a̶t̶u̶s̶ ) {
        // setting data to the front end
        $scope.returnedData = data.data;

   },function errorCallback(response) {

    console.log(response.data.message)

    });
}

我如何链接Angular promises,一旦我获得数据,我可以遍历它并根据需要进行更改,之后将其设置为前端。

2 个答案:

答案 0 :(得分:0)

在将结果存储到$scope变量之前,只需处理获取的数据:

$http.get("/getList")
  .then(function(data, status) {
    if(data.data.modules.length > 0) {
      for(var i=0; i<=data.data.modules.length; i++) {
        if(data.data.modules[i].carType === 2) {
          data.data.modules[i].carModel = data.data.modules[i].carModel / 52;
        } else if(data.data.modules[i].truckType === 2){
          data.data.modules[i].truckModel = data.data.modules[i].truckModel / 52;
        }
      }
    }
    // Storing the result
    $scope.returnedData = data.data;
  })
  .catch(function(error) {
    console.error(error)
  });

类似的代码检查存在以及modulesWithCartypeEqualToTwomodulesWithTrucktypeEqualToTwo数组,以便更舒适地调试:

$http.get("/getList")
      .then(function(data, status) {
        var modulesWithCartypeEqualToTwo = [];
        var modulesWithTrucktypeEqualToTwo = [];
        if(data.data.modules) {
          if(data.data.modules.length > 0) {
            for(var i=0; i<=data.data.modules.length; i++) {
              if(data.data.modules[i].carType === 2) {
                modulesWithCartypeEqualToTwo.push(data.data.modules[i])
                data.data.modules[i].carModel = data.data.modules[i].carModel / 52;
              } else if(data.data.modules[i].truckType === 2) {
                modulesWithTrucktypeEqualToTwo.push(data.data.modules[i])
                data.data.modules[i].truckModel = data.data.modules[i].truckModel / 52;
              }
            }
          }
        }
        console.log('modules with carType === 2');
        console.log(modulesWithCartypeEqualToTwo);
        console.log('modules with truckType === 2');
        console.log(modulesWithTrucktypeEqualToTwo);
        // Storing the result
        $scope.returnedData = data.data;
      })
      .catch(function(error) {
        console.error(error)
      });

答案 1 :(得分:0)

从承诺链接返回数据到.then方法处理函数:

var promise = $http.get("/getList").then(function(response  ̶,̶ ̶s̶t̶a̶t̶u̶s̶ ) {
        // setting data to the front end
        $scope.returnedData = response.data;
        ͟r͟e͟t͟u͟r͟n͟ response.data;

   },function errorCallback(response) {

    console.log(response.data.message)
    //IMPORTANT
    throw response;

    });

然后从返回的承诺

promise.then(function(data) {
    if(data.modules.length > 0){
         for(var i=0; i<=data.modules.length; i++){
            //code ...
         };
    };
});

在拒绝处理程序中使用throw statement很重要。否则承诺将被转换从被拒绝的承诺转变为履行承诺。