Наблюдаемое сцепление, flatMap и тип литья - PullRequest
0 голосов
/ 28 сентября 2018

Я новичок в наблюдаемых и хочу учиться.

У меня есть метод API.get (), который возвращает обещание типа T как T:

export interface T {
    data?: object;
    errors?: [object];
    extensions?: {
        [key: string]: any;
    };

Что я хотел бы сделать, это вызвать этот API в функции, подобнойэто:

public get(): Observable<R>{

   // Convert API.get():Promise<T> to an observable
   // get T.data and cast it to type R
   // return observable<R>
   // catch potential error in T.errors 

}

Как я могу это сделать?

1 Ответ

0 голосов
/ 28 сентября 2018

Если вы используете rxjs6, вы можете преобразовать Promise в Observable с помощью функции from.Затем вы отправляете трубку оператору map для его приведения.Я не уверен, является ли R определенным интерфейсом или вы хотите, чтобы get был универсальным.Если последнее верно, вам нужно поставить <R> после get, а затем использовать ключевое слово as.Это, вероятно, не удастся для большинства типов, хотя.

import { from, Observable } from 'rxjs';
import { map } from 'rxjs/operators'

/*...*/
public get<R>(): Observable<R>{
    const obs = from(API.get());
    return obs.pipe(map(response => response as R));
}
...