如何在 RxJS 中处理这个 json 响应?

Posted

技术标签:

【中文标题】如何在 RxJS 中处理这个 json 响应?【英文标题】:How to process this json-response in RxJS? 【发布时间】:2017-02-14 21:14:56 【问题描述】:

我有 angular2 应用程序(TypeScript),它使用 RxJS 来处理 json-request(我知道 angular 的服务,我只是简化了代码)。

此代码在类方法中:

this.http.post(url, body, options)
                    .map(
                        response => response.json()
                    )
                    .subscribe(result => 
                        persons => this.persons = persons
                    );

在课堂上我有字段persons,我希望这个字段应该从响应中获取数据,以便在*ngFor中使用这个persons

我还有 java-backend,它会产生这样的响应(在 map() 中添加 console.log() 后,我得到了这个输出):

message:"["personId":"29d5a903-b664-4fc3-9bd9-0836f1b3dc58","email":"test@example.com","firstname":"Test","lastname":"Testoff","username":"oooo","birthdate":"2000-05-28","gender":"male","password":"xxxxx","active":null,"profiles":[]]"

我做错了什么? (我是后台,抱歉,可能是愚蠢的问题)

【问题讨论】:

什么是response.json()?你确定它返回一个字符串吗? result => persons => this.persons = persons --- 这在语法上看起来也不正确。 我已经修复了代码,这是为了调试来定义什么是错误的对不起。 “语法正确” - TypeScript 认为没问题,也请检查这里plnkr.co/edit/r1QFQj0wZ5hgJxrsRoGF?p=preview typescriptlang.org/play --- 试试const foo = () => foo => 2; ; 看看它会翻译成什么。它将其转换为未调用的匿名函数,因此它是无操作的。 PS:是的,它语法上是正确的,我的错,仍然 - 逻辑上它是错误的。 我不明白什么不起作用... 【参考方案1】:

我看到你修复了代码并且它正在工作。我想概述一个更符合 angular2 理念的不同解决方案,不要在您的应用中保存局部变量,直接使用服务的序列:

<my-person 
    *ngFor="let person; of peopleService.people | async;" 
    [name]="person.name"
    (hello)="saidHello($event)">
  </my-person>

【讨论】:

以上是关于如何在 RxJS 中处理这个 json 响应?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Word中将http请求响应映射到我定义的对象

如何使用 jsonDecoder 处理来自 JSON 响应的动态键?

如何在没有嵌套订阅的情况下使用 rxjs 处理内部订阅数组

如何在 Angular 和 RxJs 中管理多个顺序订阅方法?

如何使用rxjs map挖掘HttpClient get请求响应?

响应式编程实战——RxJS 手动停止事件流的正确方式