繁体   English   中英

您如何返回对象的Observable,其中该对象具有使用http请求构建的属性? [RxJs]

[英]How do you return an Observable of an object where the object has a property built using an http request? [RxJs]

我有一个类型,我想从与http请求所获得的方法不同的方法中返回-我基本上想将该http请求的结果分配为该对象的属性,并返回该对象的可观察对象。 我了解以下内容为何无法正常运行,而是出于拥有代码的目的。

getAuditsByObjectAndType<T>(object: T): Observable<IAuditInformation<T>> {
    const auditInfo: IAuditInformation<T> = {
        audits: [],
        object: object
    };

    auditInfo.audits = this.get<IAudit>(`audits?id=${object.id}`)
    return Observable.of(auditInfo)
}

是否有运营商可以帮助我完成我想做的事情?

编辑:

得到了可行的实现,但可能会好很多。

getAuditsByObjectAndType<T>(object: T): Observable<IAuditInformation<T>> {
    const auditInfo: Observable<IAuditInformation<T>> = Observable.of({
        audits: [],
        object: object
    });

    return this.get<IAudit>(`AuditItems?id=${object.id}`)
        .combineLatest(auditInfo, (audits, info) => {
            info.audits = audits;
            return info
        });
}

您可以映射响应:

import 'rxjs/add/operator/map';

getAuditsByObjectAndType<T>(object: T): Observable<IAuditInformation<T>> {
  return this.get<IAudit>(`audits?id=${object.id}`)
    .map(audits => ({
      audits,
      object
    }));
}

但是,打字稿无法知道您的T包含id属性,因此无法执行以下操作:

interface TheObjectWithAnId {
  id: number;
}

getAuditsByObjectAndType<T extends TheObjectWithAnId>(object: T): Observable<IAuditInformation<T>>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM