Как отформатировать ответ API через функцию обратного вызова в угловых - PullRequest
0 голосов
/ 29 сентября 2019

Я хочу отформатировать свой ответ API через функцию обратного вызова и получить данные внутри угловой подписки

Я использовал mergemap, но это было бесполезно

this.http.get('https://some.com/questions.xml', {headers, responseType: 'text'})
  .mergeMap(
    res => xml2js.parseString(
      res,
      { explicitArray: false },
      (error, result) => {
        if (error) {
          throw new Error(error);
        } else {
          console.log(result);
          return result;
        }
      }
    )
  ).subscribe(
    data => { console.log("response", data); },
    error => { console.log(error); }
  );

Я хотел получитьответ JSON в подписке, но я получаю TypeError: Вы предоставили недопустимый объект, где ожидался поток.Вы можете предоставить Observable, Promise, Array или Iterable.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2019

Как упоминалось в xdeepakv, при использовании mergeMap or switchMap ...etc вы должны вернуть обещание или наблюдаемое.В то время как xml2js.parseString(...) имеет тип SAXParser.Поэтому вам следует использовать map.

. Или вы можете проверить этот вопрос о стеке потока о том, как вы можете parseString(...) преобразовать в обещание.

0 голосов
/ 29 сентября 2019

MergeMap ожидает, поток как данные.Вы возвращаете значение и выкидываете ошибку.Оттуда вы должны вернуть обещание.

// RxJS v6+
import { fromEvent } from 'rxjs';
import { ajax } from 'rxjs/ajax';
import { mergeMap } from 'rxjs/operators';

// free api url
const API_URL = 'https://jsonplaceholder.typicode.com/todos/1';

// streams
const click$ = fromEvent(document, 'click');

click$
  .pipe(
    /*
     * Using mergeMap for example, but generally for GET requests
     * you will prefer switchMap.
     * Also, if you do not need the parameter like
     * below you could use mergeMapTo instead.
     * ex. mergeMapTo(ajax.getJSON(API_URL))
     */
    mergeMap(() => ajax.getJSON(API_URL))
  )
  // { userId: 1, id: 1, ...}
  .subscribe(console.log);

Подробнее.Пожалуйста, проверьте документы RXJS.https://www.learnrxjs.io/operators/transformation/mergemap.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...