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){