我正在建立商店行动。
我的商店模型如下所示:

{
    entities: {[n:number]: Client},
    ids: number[],
}

我从后端获取与给定条件相对应的 ID。
然后我需要从后端获取那些尚未存储的实体。
但我不知道如何将获取的 id 传递给 withLatestFrom 函数?
const params = {
    conditions,
    fields: ['id']
};
this.apiService.getList(params)
    .pipe(
    map(resp => {
      const ids: number[] = [];
      resp.map((item: Client) => {
        ids.push(+item.id);
      });
      return ids;
    }),
    withLatestFrom(this.checkEntities()), // how to pass ids ?
    tap(resp => {
      patchState({
        entities: resp[1],
        ids: resp[0],
        loading: false
      });
    })
    );

private checkEntities(ids: number[]) {
    const params: ApiWyszukiwarka = {
      conditions: {id: ids},
      fields: 'all'
    };
    return this.apiService.getList(params);
}

或者也许我做错了什么?

最佳答案

只是不要使用 withLatestFrom 并查看 concatMapwithLatestFrom 对其源 Observable 的每次发射调用其回调,同时保持订阅所有作为参数传递的 Observable,但这不是您所需要的。您只想在获得 id 列表后调用 this.checkEntities(),然后创建一个新的 Observable 并订阅它。

所以使用 concatMap 你会有这样的东西:

map(resp => {
  ...
  return ids;
}),
concatMap(ids => this.checkEntities(ids))

关于angular - 将参数传递给 withLatestFrom 函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51080175/

10-13 01:47