通过两个服务连接一个承诺

Connecting a promise through two services

我对 angular 有点陌生,我正在尝试了解如何将 promise 与两项服务结合使用。

在 App.js 下面的代码中,我调用了 FirstService.get(),它应该等待 RestService return 结果。在 App.js 中,我想使用 .then() 来等待 FirstService.get() 的结果。

我的问题是我需要如何在第一个服务中设置承诺,以便我可以在 App.js 中使用 .then()?

谢谢!

// App.js
    FirstService.get().then(function(promise) {
         // do something here with the result

      }, function(response) {
        console.log('error');
    });

//First Service
oApp.service( 'FirstService', function( RestService, $localStorage, $q ) {
    this.get = function( ) {
        var url = o.buildServerUrl();

        // Retrieve info
        RestService.get(url, function(response) {
           return response;
       });
    };
});

// Rest Service
oApp.service( 'RestService', function( $rootScope, $http ) {

    this.get = function ( url, callback ) {
        try {

            $http.get(url).
                success(function(data, status, headers, config) {
                    var response = o.processServerResponse(data, status);
                    callback(response);
                }).
                error(function(data, status, headers, config) {
                    var response = o.processServerResponse(data, status);
                    callback(response);
                });
        }
        catch(err) {
            var response = o.createExceptionResponse(err.message);
            callback(response);
        }
    }
});

应该这样做:

// App.js
    FirstService.get().then(function(promise) {
         // do something here with the result

      }, function(response) {
        console.log('error');
    });

//First Service
oApp.service( 'FirstService', function( RestService, $localStorage, $q ) {
    this.get = function( ) {
        var deferred = $q.defer();
        var url = o.buildServerUrl();

        // Retrieve info
        RestService.get(url, function(response) {
           deferred.resolve(response);
       });
       return deferred.promise;
    };
});

// Rest Service
oApp.service( 'RestService', function( $rootScope, $http ) {

    this.get = function ( url, callback ) {
        try {

            $http.get(url).
                success(function(data, status, headers, config) {
                    var response = o.processServerResponse(data, status);
                    callback(response);
                }).
                error(function(data, status, headers, config) {
                    var response = o.processServerResponse(data, status);
                    callback(response);
                });
        }
        catch(err) {
            var response = o.createExceptionResponse(err.message);
            callback(response);
        }
    }
});