angular - Linq First相当于TypeScript+rxjs

标签 angular typescript rxjs observable

我熟悉 C# Linq,但对 ng2+TypeScript+rxjs 开发不熟悉。

在下面代码的getDetailByDetailId方法中,如何从可观察列表中获取First匹配项?

模型

export class Master {
    Id: string;
    SomeProperty: string;
    Details: Detail[];
}    

export class Detail {
    DetailId: string;
    DetailProperty: string;
}

方法

getMaster(id:string): Observable<Master>{
    return this.http.get(this.webUrl + "/" + id) // web api
        .map(this.extractData)
        .catch(this.handleError);
}

private extractData(res: Response) {
    let body = res.json() as Master[];
    return body || [];
}

getDetails(masterId: string): Observable<Detail[]>{
    return this.getMaster(masterId)
        .map(master => master.Details);
}

getDetailByDetailId(masterId: string, detailId: string): Observable<Detail>{
    return this.getDetails(masterId)
        .first(d => d.DetailId === detailId); // <-- Error occurred
}

getDetailByDetailId 方法给出以下两个错误。

Error:(47, 16) TS2322: Type 'Observable<Detail[]>' is not assignable to type 'Observable<Detail>'. Type 'Detail[]' is not assignable to type 'Detail'. Property 'DetailId ' is missing in type 'Detail[]'.

Error:(48, 45) TS2339: Property 'DetailId' does not exist on type 'Detail[]'.

最佳答案

问题是 getDetails返回Observable<Detail[]> 。因此,值被发送到 first方法是Detail[] ,没有一个Detail 。您可以做的就是首先使用 flatMap 展平数组,然后您可以调用first

getDetailByDetailId(masterId: string, detailId: string): Observable<Detail> {
  return this.getDetails(masterId)
    .flatMap(details => details)
    .first((d: Detail) => d.DetailId === detailId);
}

关于angular - Linq First相当于TypeScript+rxjs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39889489/

相关文章:

angular - Azure Bot Framework DirectLine v3 开始对话 - 错误 403 禁止

iphone - typescript .ts 文件的 UTI 是什么?

javascript - 按条件过滤,带断路取n

javascript - 管道 RxJS 可观察到现有主题

rxjs - 组合 2 个 Observables rxjs

Angular CLI 在错误的位置寻找路由器模块? "router_module not found"

javascript - 如何验证逗号分隔的电子邮件地址并限制电子邮件地址的 Angular ?

javascript - ng2-smart-table 删除后不绑定(bind)

angular - 如何使用 navParams 获取整个对象 - Ionic 3 Angular 4

angular - 没有可观察对象的服务