角度rxjs有条件地调用HTTP端点

角度rxjs有条件地调用HTTP端点,rxjs,rxjs6,Rxjs,Rxjs6,我正在尝试执行一些Trello自动化,因此我正在进行一个API调用以创建一个列表,该列表返回一个ID。然后,如果我指定了卡片名称,我需要使用列表ID并行进行另一组调用。无论我是否创建卡片,我都要返回创建的列表的ID 但是编译器不喜欢我在iif调用中所做的操作,说: TS2345:类型为“Observable”的参数不能分配给类型为“(值:HasId,索引:number)=>ObservableInput”的参数。类型“Observable”不提供与签名(值:HasId,索引:number):Ob

我正在尝试执行一些Trello自动化,因此我正在进行一个API调用以创建一个列表,该列表返回一个ID。然后,如果我指定了卡片名称,我需要使用列表ID并行进行另一组调用。无论我是否创建卡片,我都要返回创建的列表的ID

但是编译器不喜欢我在
iif
调用中所做的操作,说:

TS2345:类型为“Observable”的参数不能分配给类型为“(值:HasId,索引:number)=>ObservableInput”的参数。类型“Observable”不提供与签名(值:HasId,索引:number):ObservableInput)匹配的内容

我不清楚它为什么要分配给
(value:HasId,index:number)=>observeibleInput
,所以我不知道如何修复

这就是我试图使用的代码

接口HasId{
id:字符串
}
私有createCard(idList:string,name:string):可观察{…}
私有createList(boardId:string,name:string,cards?:string[]):可观察{
让idList=“”
返回此.http.post(`boards/${boardId}/lists`,null,{params:{name}})
.烟斗(
轻触(x=>idList=x.id),
合并地图(
iif(
()=>卡片,
forkJoin(cards.map(name=>this.createCard(idList,name)))
)),
映射(()=>idList)
)
}

<代码> > p>查看您的错误,您将能够注意到, > COMMEMAP 接受返回可观察的函数(而不是实际可观察的),因此考虑修改您的代码如下:

mergeMap(()=>
iif(
()=>卡片,
forkJoin(cards.map(name=>this.createCard(idList,name)))
)
)

您必须从
mergeMap
的投影函数返回一个值:

mergeMap(() => 
  iif(
    () => cards,
    forkJoin(cards.map(name => this.createCard(idList, name)))
  )
),