通过两种服务连接承诺

时间:2015-05-23 15:26:28

标签: javascript angularjs angular-promise

我对角度有点新意,并试图了解如何使用两种服务的承诺。

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

我的问题如何在First Service中设置promise以便我可以在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);
        }
    }
});

1 个答案:

答案 0 :(得分:1)

这应该这样做:

// 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);
        }
    }
});