Как обработать этот json-ответ в RxJS?

#angularjs #json #typescript #rxjs

#angularjs #json #typescript #rxjs

Вопрос:

У меня есть приложение angular2 (TypeScript), которое использует RxJS для обработки json-запроса (я знаю о службах angular, я просто упростил код).

Этот код находится в методе класса:

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

В классе у меня есть поле persons , и я хочу, чтобы это поле получало данные из ответа, чтобы использовать это persons в *ngFor

Также у меня есть java-сервер, который выдает такой ответ (я получил этот результат после добавления console.log() map() ):

 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":[]}]"
  

Что я делаю не так? (Я сторонний разработчик, извините, за глупые вопросы, может быть)

Комментарии:

1. Что такое response.json() ? Вы уверены, что он возвращает строку? result => { persons => this.persons = persons } — это также не выглядит синтаксически корректным.

2. У меня есть исправленный код, он был для отладки, чтобы определить, что не так, извините. «синтаксически корректно» — TypeScript считает, что все в порядке, также, пожалуйста, проверьте здесь plnkr.co/edit/r1QFQj0wZ5hgJxrsRoGF?p=preview

3. typescriptlang.org/play — попробуйте const foo = () => { foo => 2; }; и посмотрите, во что это переводится. Он преобразует его в анонимную функцию, которая не вызывается, следовательно, она не работает. PS: да, это синтаксически правильно, мой плохой, но логически это неправильно.

4. Я не понимаю, что не работает…

Ответ №1:

Я видел, что вы исправили код, и он работает. Я хотел бы изложить другое решение, которое больше соответствует философии angular2, не храните локальную переменную в своем приложении, используйте непосредственно последовательность службы:

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