Angular js Http承诺打字稿

时间:2016-08-16 14:45:24

标签: javascript angularjs typescript promise

我的代码存在问题,希望有人能帮助我理解并指出正确的方向。问题在于嵌套承诺。一个特定的方法需要向服务器发出两个Http请求 - 第一个请求在第一个成功完成后,第二个请求的结果应该在调用类中解析。

每当使用我在我的示例中显示的模式中包含单个Http调用的方法时,它按预期工作。这是代码:

服务1:

public class Service1 extends IService1 {
    public PostData(url : string, data: any) : ng.IHttpPromise<any> { 
        return this.$http.Post(url, data);
    }

    public GetData (url : string) : ng.IHttpPromise<any> {
        return this.$http.Get(url);
    }
}

服务2:

public class Service2 extends IService2 {
    private srv1 : IService1;

    static inject = ["Service1"];

    public constructor(service1){
        this.srv1 = service1;
    }

    public GetLetters(ids : number[]) : ng.IHttpPromise<any>{
        var scope = this;
        return this.srv1.PostData("api/letters", ids).success(function (data){
            return scope.srv1.GetData("api/lettters/" + data);
        })
    }
}

控制器

public class Controller1 {

    private service2 : IService2;
    private array : Letter[];

    static inject = ['Service2']

    public constructor (Service2 : IService2){
        this.service2 = Service2;
    }

    public someFunc() : void 
        var scope = this;
        // I have problems here when I try to retrieve the letters 
        this.service2.GetLetters(someIds).success((data) => {
            array = data;
        });
    }
}

我应该采取不同的方法吗?控制器内的数据是来自GetLetters方法的外部承诺的已解析数据。我想获得内部承诺的解析数据

1 个答案:

答案 0 :(得分:1)

Service2方法GetLetters应返回一些内容..

public class Service2 extends IService2 {
    ...

    public GetLetters(ids : number[]) : ng.IHttpPromise<any>{
        var scope = this;
        //this.srv1.PostData("api/letters", ids).success(function (data){
        return this.srv1.PostData("api/letters", ids).success(function (data){
            return scope.srv1.GetData("api/lettters/" + data);
        })

否则只是评估......