【问题标题】:Angular js Http promises in typescript打字稿中的Angular js Http承诺
【发布时间】:2016-12-23 00:13:03
【问题描述】:

我的代码有问题,希望有人能帮助我理解并指出正确的方向。问题在于嵌套承诺。具体方法需要向服务器发起两次 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 方法的外部承诺的解析数据。我想得到内部promise的resolved数据

【问题讨论】:

    标签: javascript angularjs typescript promise


    【解决方案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);
            })
    

    否则它只是被评估......

    【讨论】:

    • 我的错,我忘了在 Post 方法之前提到 return。我还在控制器中使用了.then。固定的。关于你的回答,通过在两个函数中都做一个 return 语句,它会实现我的目标吗? Controller中解析出来的数据会有字母?
    猜你喜欢
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 2020-03-10
    • 2018-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    相关资源
    最近更新 更多