Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 可观察的链接、平面图和类型转换_Typescript_Promise_Observable - Fatal编程技术网

Typescript 可观察的链接、平面图和类型转换

Typescript 可观察的链接、平面图和类型转换,typescript,promise,observable,Typescript,Promise,Observable,我对可观测事物是新手,我想学习 我有一个API.get()方法,它返回类型为T的承诺,因为T是: export interface T { data?: object; errors?: [object]; extensions?: { [key: string]: any; }; 我想做的是在如下函数中调用此API: public get(): Observable<R>{ // Convert API.get():Prom

我对可观测事物是新手,我想学习

我有一个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 

}
public get():可观察{
//Convert API.get():将承诺转换为可观察的
//获取T.data并将其强制转换为类型R
//可观测回波
//捕获T错误中的潜在错误
}

我该怎么做呢?

假设您使用rxjs6,您可以使用
from
函数将承诺转换为可观察。然后通过管道连接到
map
操作符来强制转换它。我不确定R是一个定义的接口,还是希望
get
是泛型的。如果后者为真,则需要将
放在
get
之后,然后将
用作关键字。但对于大多数类型,这可能会失败

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));
}
import{from,Observable}from'rxjs';
从“rxjs/operators”导入{map}
/*...*/
public get():可观察{
const obs=from(API.get());
返回obs.pipe(map(response=>response as R));
}

R
已定义的类型,还是要将
get
函数设置为通用?您还可以使用
catchErrors
来完成问题中有关错误的部分谢谢。R是一个类似于Eok的接口,如果R是一个已知的接口,我们需要知道它是什么样子才能正确地转换它。但是,如果例如
R
只有一个
data
字段,转换将如下所示:
{data:response.data}
@PAc0在我的例子中,我有两个错误源:1。当API.Get()失败时2。T.errors不是空的。get()位于我的服务层,我在组件级别订阅它。订阅时如何检查所有这些错误?我建议您在订阅之前使用
catchError
操作符检查。将其放置在管道内的
贴图之后。你应该能够通过谷歌搜索找到好的文档。如果您仍然无法理解,请在stackoverflow上创建一个新问题,在这里您可以提到您尝试过的内容。