选择Observable流的最后一个变量

时间:2017-08-11 13:35:44

标签: angular typescript rxjs

我有一个变量'消息'包含来自对话的消息:

messages: Observable<Message[]>;

我填写了我的变量&#39;消息&#39;像这样:

const newMessage = new Message(objMessage);
newThread.messages = Observable.of([newMessage]);

我希望我的lastMessage变量自动包含&#39;消息中的最后一条消息。变量:

lastMessage: Message = null;

这是我所做的,它不起作用:

const messagesThread: Thread = threads[message.thread.id];
      if (!messagesThread.lastMessage ||
        messagesThread.lastMessage.date < message.date) {
        messagesThread.lastMessage = message;
      }

/////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// /////////// 修改

我的功能是添加新消息:

addNewMessage(objMessage: any) : void {
    const flo: User = new User(objMessage.author, objMessage.site);
    const newThread: Thread = new Thread(objMessage.id, [flo]);
    const newMessage = new Message(objMessage);

    objMessage.date = moment().toDate();

    newThread.messages = Observable.of([newMessage]);
    newThread.messages.last().subscribe((message) => {
      newThread.lastMessage = message;
    });                    //DOESN'T WORK

    objMessage.thread = newThread;

    this.addMessage(newMessage);
    this.addThread(newThread);
 }

我初始化我的变量:

messages: Observable<Message[]>;
lastMessage: Message = null;

我有这个错误:

Type 'Message[]' is not assignable to type 'Message'

1 个答案:

答案 0 :(得分:1)

您也可以使用.last();运算符

来源

的例子

var source = Rx.Observable.range(0,10).last();

var subscription = source.subscribe(
  function (x) {
    console.log('Next: %s', x);
  },
  function (err) {
    console.log('Error: %s', err);
  },
  function () {
    console.log('Completed');
  });

// => Next: 9
// => Completed
像这样:

 newThread.messages.last().subscribe((message)=>{

         console.log('last messages',messages);
   newThread.lastMessage = messages /// NOT that this is messages as an array
 });

注意:

您有Observable条消息,因此每个活动都会为您提供message数组,而不是message

如果你不想要那个,你必须摆脱那个阵列,我不确定你在这里想要实现的是什么