Javascript 如何在angularjs promise中解析此结果
我有这样的服务Javascript 如何在angularjs promise中解析此结果,javascript,angularjs,Javascript,Angularjs,我有这样的服务 app.service('newsService', function($q, $timeout,$http) { this.getNewsName = function(id) { var deferred = $q.defer(); var newsId = parseInt(id, 10); $timeout(function() { $http({ url: "entry/GetNewsT
app.service('newsService', function($q, $timeout,$http) {
this.getNewsName = function(id) {
var deferred = $q.defer();
var newsId = parseInt(id, 10);
$timeout(function() {
$http({
url: "entry/GetNewsTitle",
method: "POST",
data: $.param({'id':newsId}),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
})
.success(function(data, status, headers, config) {
deferred.resolve(data.name);
})
.error(function(data, status, headers, config) {
console.log('failed');
});
}, 10);
return deferred.promise;
}
另一个函数中的console.log(deferred.promise)
为我提供了三个函数“catch”“finally”和“then”,但我如何才能再次实现数据.name
?如下:
newsService.getNewsName(id).then(function(name) {
});
首先,您应该优化服务方法以避免。您不需要创建虚拟延迟对象,因为
$http(…)
已经返回承诺
该服务将如下所示:
app.service('newsService', function($http) {
this.getNewsName = function(id) {
return $http({
url: "entry/GetNewsTitle",
method: "POST",
data: $.param({
'id': parseInt(id, 10)
}),
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
}
}).success(function(data, status, headers, config) {
return data.name;
}).error(function(data, status, headers, config) {
console.log('failed');
});
};
});
注意,getNewsName
返回$http
的结果
然后,使用此服务的控制器将使用Promise API链接到该服务:
newsService.getNewsName(123).then(function(name) {
console.log(name);
});
你能再解释一下吗?我必须向我们提供此函数的位置?@mhadadi如果要使用返回承诺的所有函数所需的名称,然后使用
然后获取值。@mhadadi您应该在控制器中调用该函数,在您希望使用该名称的位置。getNewsName函数在哪里?@mhadadi在您的服务中:this.getNewsName=function(id){