我的工厂似乎没有执行我的$http.get。这是我的控制器:
app.factory("myService", function($http) {
var myService = {
retrieve: function(id, type) {
var retrievedData = {
device: {},
childDevices: [],
error: {}
};
.
.
.
$http.get(url, headers)
.success(function(data, status) {
// some data post-processing
// some logs
})
.error(function(data, status) {
// some data post-processing
// some logs
});
return retrievedData;
};
return myService;
});$http.get中的日志未打印。
我在需要使用promise的地方读到过,但我看到的大多数示例都直接返回$http.get。我不想立即返回$http.get,因为我需要在工厂中而不是在控制器中对数据进行一些修改。
谢谢。
发布于 2014-10-27 15:21:12
因为当您返回retrievedData时,它还没有被检索到。这就是为什么你应该使用promises:
app.factory("myService", function ($http,$q) {
var myService = {
retrieve: function (id, type) {
var deferred = $q.defer();
var retrievedData = {
device: {},
childDevices: [],
error: {}
};
$http.get(url, headers).then(function (data) {
// success do your success things here and return data
deferred.resolve(data);
},
function (err) {
deferred.reject(err);
});
return deferred.promise;
}
};
return myService;
});//用法
myService.retrive(id,type).then(function(data){
// data retrived
})发布于 2014-10-27 15:45:11
在angular js中,promise用于返回来自后台的响应。在你的代码中,响应前返回retrievedData来自后端。这就是为什么angular使用promise。因此,当响应来自后端时,它执行成功块和成功块,并使用deferred.resolve(data)解析承诺。当错误发生时,error block get execute,它拒绝promise deferred.reject(err) .but,当它解析promise时,它返回响应数据。
服务代码:
app.factory("myService", function ($http,$q) {
var myService = {
retrieve: function (id, type) {
var deferred = $q.defer();
var retrievedData = {
device: {},
childDevices: [],
error: {}
};
$http.get(url, headers).then(function (data) {
// after success this block execute
deferred.resolve(data);
},
function (err) {
//after error this block execute
deferred.reject(err);
});
return deferred.promise;
}
};
return myService;
});控制器代码:
//calling retrive function
myService.retrive(id,type).then(fucntion(data){
...
})
.catch(function(){
...
})https://stackoverflow.com/questions/26582614
复制相似问题