防止返回$ http get call响应,直到所有数据到来

时间:2016-10-19 08:58:53

标签: angularjs

我正在使用" $ http"在工厂中获取调用并希望停止将响应返回到控制器,直到所有数据都来自后端。(因为它是异步调用,在获取所有数据之前,调用旁边的代码执行。)我想,响应将是当所有数据到来时返回,然后执行下一个代码。我怎样才能做到这一点?

我的控制器是:

(
    function(){
        angular.module("module").controller("controller", ["$scope",   "FactoryName", function ($scope, FactoryName) {

        var getPrograms = function () {
            FactoryName.functionName()
               .then(
                      function (d) {                              
                              $scope.data = d.Data;                              
                      },
                       function (errResponse) {

                       }
               );
        }
      }])

  }()

)

这是我的工厂:

angular.module("module").factory("FactoryName", ["$http", '$q', function   ($http, $q)   {
    return {
        functionName: function () {
            return $http.get("url")
                    .then(
                            function (response) {
                                return response.data;
                            },
                            function (errResponse) {
                                return $q.reject(errResponse);
                            }
                    );
            },
      };
}])

3 个答案:

答案 0 :(得分:1)

用这个替换你的工厂代码

File file = null;
try{
    String fileName = String.valueOf(System.currentTimeMillis())+".jpeg";
    file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), fileName);

    if(file.exists()){
        file.delete();
    }

    OutputStream os = new BufferedOutputStream(new FileOutputStream(file));
    template.getBitmap().compress(Bitmap.CompressFormat.JPEG, 100, os);
    os.close();
    Toast.makeText(context,"Templated saved to your device",Toast.LENGTH_SHORT).show();
}
catch (Exception e)  {
    Toast.makeText(context,e.getMessage(),Toast.LENGTH_SHORT).show();
}

你的控制器将是这样的

type Profile struct {
    gorm.Model
    Name string
}

type User struct {
    gorm.Model
    Profile      Profile `gorm:"ForeignKey:ProfileRefer"` // use ProfileRefer as foreign key
    ProfileRefer int
}

答案 1 :(得分:0)

在工厂中使用这种方式。

functionName: function () {
       var deferred = $q.defer();
       return $http.get("url")
       .then(function (response) {
             deferred.resolve(response.data);
        }, function (errResponse) {
             deferred.reject(errResponse);
        }
    );
   return deferred.promise;
  },
};

答案 2 :(得分:0)

让我们以不同的方式重新编写工厂 -

angular.module("module").factory("FactoryName", ["$http", '$q', function   ($http, $q)   {
    return {
        functionName: function () {

           var defer = $q.defer();
           $http.get(URL)
           .success(function(res){
                defer.resolve(res);
           })
           .error(function(error, status){
               defer.reject(error)
           });
        return defer.promise;,
      };
}])