我正在使用" $ 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);
}
);
},
};
}])
答案 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;,
};
}])