>

상점에서 메시지 목록을 찾는 ngrx를 사용하여 Angular에서 서비스를 작성하고 있습니다. 목록이 있으면 각 메시지에 대한 일부 비동기 데이터를 가져 와서 새 오브젝트 (ModifiedMessage)를 정의해야합니다. 서비스는 수정 된 메시지 목록과 함께 Observable을 반환해야합니다.

내 시도 :

getMessages(): Observable<ModifiedMessage[]> {
        return combineLatest(
          this.store.select(MessageSelectors.getListOfMessages),
        ).pipe(
          map(([messages]) => {
            return messages.map(message => {
              return this.store
                .select(MessageSelectors.getUserForMessage(message.userId))
                .pipe(
                  take(1),
                  map(user => {
                    return new ModifiedMessage({
                      id: message.id,
                      user: user.name,
                    });
                  })
                );
            });
          })
        );
      }

이것은 TypeScript가 Observable []>을 반환하고 Observable []>이 아니라고 불평하므로 작동하지 않습니다.

어떻게하면 되나요?


  • 답변 # 1

    서비스에서 상태 선택 로직을 유지하기 때문에 수정 된 메시지를 가져 오기 위해 선택기를 작성하는 것이 좋습니다.

    예 :

    // ...
    static getListOfModifiedMessages = createSelector(
      MessageSelectors.getListOfMessages,
      MessageSelectors.getUsers,
      (messages, users) => {
        return messages.map(({ id, userId }) =>
        {
          const { name } = users.find(user => user.id === message.userId);
          return new ModifiedMessage({ id, name });
        });
      }
    );
    // ...
    
    

관련 자료

  • 이전 ios - 왜 uipagecontrol이 첫 번째로 올바르게 업데이트되지 않지만 Xcode를 통해 두 번째입니다
  • 다음 bash - jq를 사용하여 JSON 맵을 CSV로 변환