【问题标题】:Property 'concatMap' does not exist on type 'Observable<Object>'?'Observable<Object>' 类型上不存在属性 'concatMap'?
【发布时间】:2018-06-25 11:17:15
【问题描述】:

我从 Angular 4 升级到 5 并将 Http 替换为 HttpClient。我从我的http.post 调用中删除了链式映射,该调用现在返回一个Observable&lt;Object&gt;,但在我的组件中它现在抱怨concatMap does not exist on type Observable&lt;Object&gt;。这是我正在做的一个例子:

//service
import { HttpClient} from '@angular/common/http';

constructor(private _http: HttpClient) { }

registerDomain()
{

return this._http.post('/api/domain/domain/register', {});
}

//component
registerDomain(caseId,domain) {
    return this._domainService.registerDomain(caseId,domain)
      .concatMap(operation => this.getOperationDetail(operation.OperationId,this.caseId,domain))
      .concatMap(() => this.createRecordSets(domain));
  }

我可以在Observable&lt;Object&gt; 上看到 map 和 mergeMap,但在 concatMap 上看不到

【问题讨论】:

  • 您是否导入了必要的附加功能?
  • 我做了以下操作: import {concatMap} from 'rxjs/operators';

标签: angular rxjs5


【解决方案1】:

你需要使用管道

registerDomain(caseId,domain) {
    return this._domainService.registerDomain(caseId,domain)
      .pipe(
         concatMap(operation => this.getOperationDetail(operation.OperationId,this.caseId,domain))
         concatMap(() => this.createRecordSets(domain))
    );
  }

【讨论】:

  • 这也可以,但为什么我只需要使用 concatMap 而不是 mergeMap 或 flatMap 之类的?
  • 我认为您需要为 mergeMap 和 flatMap 执行此操作!或者你可以从 rxjs/add/operator 导入 concatMap 和 flatMap!
  • .concatMap() 中不需要 .
【解决方案2】:

尝试导入这个:

import 'rxjs/add/operator/concatMap'

【讨论】:

  • 这行得通,但是导入的新语法呢?
  • 你也可以在这里使用解构: import {concatMap} from 'rxjs/add/operator' 'rxjs/operator' 向 Observable 添加一个静态方法
  • import { concatMap } from 'rxjs/operators'; for angular 6
猜你喜欢
  • 2020-07-13
  • 2019-03-16
  • 1970-01-01
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多