如何检查多条件以将 observable 与 rxjs 连接起来

How to check multiconditions to concatenate an observable with rxjs

我想对可观察到的消息进行检查,并像这样场景化输出: 检查消息是发给我的还是我发的,然后将前 20 个字符与 朋友的名字 连接起来,或者如果是我与 的消息 检查消息的类型,如果它是照片或文件来制作消息,例如您发送了一个附件

getLastMessage(onlineUserModel: OnlineUserModel): Observable<string> {
    let message: Observable<string>;
   
    const messageModel = this.allDirectMessages$
      .pipe(
        map((x) =>
          x.filter(
            (f) =>
              f.messageModel.to.userName === onlineUserModel.userName ||
              f.messageModel.from.userName === onlineUserModel.userName
          )
        )
      )
      .pipe(map((data) => data[data.length - 1].messageModel))
      .pipe(
        map((item) => {
          if (item.to.userName == onlineUserModel.userName) {
            message = concat("You", item.content, "...");
          }
          else (item.to.userName == onlineUserModel.userName) {
            message = concat("You", item.content, "...");
          }
        })
      );

   
    return message;
  }

如果您想 return 消息作为 Observable<string> 您可以这样做:

getLastMessage(onlineUserModel: OnlineUserModel): Observable<string> {   
  return this.allDirectMessages$
    .pipe(
      filter((f) =>
          f.messageModel.to.userName === onlineUserModel.userName ||
          f.messageModel.from.userName === onlineUserModel.userName
      ),
      map((data) => {
        const item = data[data.length - 1].messageModel;
        if (item.to.userName == onlineUserModel.userName) {
          return `You ${item.content}...`;
        }
        else (item.from.userName == onlineUserModel.userName) {
          return `Them ${item.content}...`;
        }
      })
    );
}

我尝试与您分享我的结果,只是我在过滤器之前添加了地图运算符:

getLastMessage(onlineUserModel: OnlineUserModel): Observable<string> {   
  return this.allDirectMessages$
    .pipe(
      filter((f) =>
          f.messageModel.to.userName === onlineUserModel.userName ||
          f.messageModel.from.userName === onlineUserModel.userName
      ),
      map((data) => {
        const item = data[data.length - 1].messageModel;
        if (item.to.userName == onlineUserModel.userName) {
          return `You ${item.content}...`;
        }
        else (item.from.userName == onlineUserModel.userName) {
          return `Them ${item.content}...`;
        }
      })
    );
}