如何使用rxjs运算符修改Observable值?

时间:2019-04-10 07:04:13

标签: angular rxjs

我有一个角度应用程序,并且在其中一个组件中,我通过服务获取用户的通知(电子邮件)。服务返回一个对象数组,每个对象中都有电子邮件的信息,例如主题,发送者的用户ID等。 电子邮件对象数组的结构如下:

[{
  UserId:"...",

  Notification:{
     Subject:null,
     Body:"<div>...</div>",
     .
     .
     .
  },
  .
  .
  .
},
.
.
.]

某些电子邮件没有主题,对象中的Subject属性值为null。我想为带有Subject:null的电子邮件设置一个值。

this.notifService.getAllNotificationsForCurrentUser(userId)
.pipe(
    map(emails => {
       emails.map(email=>{
         if(email.Notification.Subject === null){
            email.Notification.Subject = "(No Subject)";
         }
       })
    }
)
.subscribe(
    result=> this.messages = result
);

我使用了map运算符,它不起作用。而且有一些错误:

Cannot read property 'Notification' of undefined

我该如何解决?

2 个答案:

答案 0 :(得分:3)

rxjs map运算符与Array.prototype.map()一起使用。

  1. 第一个map允许您修改电子邮件的数组,就像顺着流一样。它会映射到流元素上,每个元素是一组电子邮件

  2. 第二个map更改电子邮件数组,以将空白的subject字段设置为no subject。它映射到电子邮件数组,每个元素都是一封电子邮件

import { map } from 'rxjs/operators';

this.notifService.getAllNotificationsForCurrentUser(userId).pipe(
    map(emails => {
        return emails.map(email => ({
            ...email,
            Notification: {
                ...Notification,
                Subject: email.subject ? email.subject : 'no subject'
            }
        }));
    })
).subscribe(
    result=> this.messages = result
);

答案 1 :(得分:1)

如果这只是出于显示目的,您应该这样做

scala> :silent

scala> val config=Map("secret"->"value")

scala> :silent

如果没有,则去映射数组。