RxJS назначает наблюдаемые и получает данные в один поток - PullRequest
1 голос
/ 15 мая 2019

Я пытаюсь сначала назначить Observable, а затем подписаться на его значения. Этот код:

//assign observable
    this.messagesDataSource$ = this.messageService.getMessagesDataSource(this.messagesContainerTitle);

//subscribe to its values     
    this.messagesDataSource$.subscribe((messages: Message[]) => {
                            this.messagesArray = messages;
                        });

работает нормально, но я не думаю, что это хороший подход. Я пытался запустить этот процесс с pipe (), но все равно, если массив данных подписки не будет назначен. Моя третья идея состояла в том, чтобы использовать карту

this.messagesDataSource$ =
        this.messageService.getMessagesDataSource(this.messagesContainerTitle)
            .map(messages => this.messagesArray = messages)

но все равно нет результата. Можете ли вы дать мне какой-нибудь совет, как назначить наблюдаемые и затем получить их данные в одном потоке?

EDIT

map () в трубе там тоже не срабатывает:

this.messagesDataSource$ =
this.messageService.getMessagesDataSource(this.messagesContainerTitle)
            .pipe(
                map((messages) => {
                console.log('in pipe');
                return messages
            }))

1 Ответ

3 голосов
/ 15 мая 2019

Наблюдаемые значения являются ленивыми в том смысле, что они выполняют значения только тогда, когда что-то подписывается на это

При втором подходе вы не подписываетесь на Observable, поэтому не получаете никаких данных. Вы получите данные, когда подпишетесь на них.

По той же причине ваш оператор map также не работает. оператор map сработает, когда вы подпишетесь на Observable.

Если вы не используете messagesDataSource$ где-либо еще в вашем коде, вы можете пропустить дополнительное назначение и напрямую подписаться на возвращенный Observable.

this.messageService.getMessagesDataSource(this.messagesContainerTitle)
  .subscribe(messages => this.messagesArray = messages)

Или, если вы хотите сделать это, вы можете использовать async трубу, которая автоматически подпишется на ваш Observable под капотом

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...