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

Connecting a promise through two services

本文关键字:两个 服务 连接 一个承诺      更新时间:2023-09-26

我对angular有点陌生,我正在尝试理解如何将一个承诺与两个服务一起使用。

在下面的App.js代码中,我调用FirstService.get(),它应该等待RestService返回结果。在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);
        }
    }
});
相关文章: