我在服务中有这个代码,它对我有用。据我所知,$http.get()
返回一个promise,promise是异步执行的,所以为什么我需要使用deffered.resolve(res.data)
来返回我服务中的数据。非常感谢。
data.posts = function(page, perPage, format, orderBy) {
var deffered = $q.defer();
$http.get(hostName, {
params: {
'page': page,
'per_page': perPage,
'filter[post_format]=': format,
'filter[orderby]=': orderBy,
'order': 'desc'
}
}).then(function(res) {
deffered.resolve(res.data);
})
return deffered.promise;
}
答案 0 :(得分:0)
如果真的在服务中,则不需要推迟。服务中的方法从上面的$ http请求中返回promise。
function exampleService($http) {
var data = this;
data.post = function(page, perPage, format, orderBy) {
return $http.get(hostName, {
params: {
'page': page,
'per_page': perPage,
'filter[post_format]=': format,
'filter[orderby]=': orderBy,
'order': 'desc'
}
}).then(function(res) {
//do stuff with success
})
.catch(function(err) {
//do stuff with error
})
.finally(function() {
//optionally use this as well maybe if you had loading type overlay/icon
});
};
}
//preferred method as it makes methods available before the sevice has been returned
function exampleService($http) {
function post(page, perPage, format, orderBy) {
return $http.get(hostName, {
params: {
'page': page,
'per_page': perPage,
'filter[post_format]=': format,
'filter[orderby]=': orderBy,
'order': 'desc'
}
}).then(function(res) {
//do stuff with success
})
.catch(function(err) {
//do stuff with error
})
.finally(function() {
//optionally use this as well maybe if you had loading type overlay/icon
});
}
//revealing module pattern
return {
post: post,
};
}
答案 1 :(得分:0)
为什么要用它?因为作者并不了解更多。但是有many reasons not to use it。
代码应该是
data.posts = function(page, perPage, format, orderBy) {
return $http.get(hostName, {
params: {
'page': page,
'per_page': perPage,
'filter[post_format]=': format,
'filter[orderby]=': orderBy,
'order': 'desc'
}
}).then(function(res) {
return res.data;
});
};