Angular js的Http承诺在typescript中

Angular js Http promises in typescript

本文关键字:typescript 承诺 Http js Angular      更新时间:2023-09-26

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

只要在包含单个Http调用的方法中使用示例中显示的模式,它就会像预期的那样工作。下面是代码:

Service1:

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);
    }
}
生成

Service2:

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方法外部承诺的解析数据。我想要得到内部promise

的解析数据

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

否则只是求值…