Как добавить проверку ошибок в метод внутри сервиса в приложении Ioni c? - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь добавить некоторую обработку ошибок в функцию ниже в моем приложении Ioni c / Angular:

Компонент детализации разговора:

this.conversationsSub = this.conversationsService
    .getConversation(this.conversationId)
        .subscribe(
            conversation => {
            this.usersSub = this.usersService.getUserByUserId(this.conversation.mechanicId).subscribe(
                user => {
                    loadingEl.dismiss();
                });
            }, 
            error => {
            loadingEl.dismiss();
            this.alertCtrl.create({
              header: 'An Error Occurred',
              message: 'Conversation not found. Please try again later.',
              buttons: [
                {
                  text: 'Okay',
                  handler: () => {
                    this.router.navigate(['/home']);
                  }
                }
              ]
            }).then(alertEl => {
              alertEl.present();
            })
          });

Итак, когда я Передав неверное значение this.conversationId, alertController выше отображает ожидаемое сообщение об ошибке.

Тем не менее, я получаю это сообщение об ошибке в консоли в отношении this.conversationsService.getConversation():

Невозможно прочитать свойство 'userId' с нулевым значением

Вот метод в Службе бесед:

 getConversation(id: String) {
    return this.http
      .get<ConversationData>(
        `https://mychanic-60927.firebaseio.com/conversations/${id}.json`
      )
      .pipe(
        map(convoData => {
          return new Conversation(
            id,
            convoData.userId,
            convoData.mechanicId,
            convoData.messages
          );
        })
      )
  }

Может кто-нибудь подсказать, как я могу обработать эту ошибку, если this.conversationId неверен?

Я пытался добавить convoData?.userId, но это не сработало.

1 Ответ

0 голосов
/ 18 апреля 2020

Что-то вроде?

getConversation(id: String) {
    return this.http
    .get<ConversationData>(
        `https://mychanic-60927.firebaseio.com/conversations/${id}.json`
    )
    .pipe(
        map(convoData => {
            convoData !== null 
                ? return new Conversation(
                    id,
                    convoData.userId,
                    convoData.mechanicId,
                    convoData.messages
                )
                : throw {'msg' : 'Invalid Id'};
         })
    )
}

или, если желаемый результат не является ошибкой, вы можете просто заменить строку броска на of () и вернуть пустую наблюдаемую величину, переместив return в перед проверкой нуля.

...