Функция, объявленный тип которой не является ни void, ни any, должна возвращать значение. Возврат значения из подписки - PullRequest
0 голосов
/ 05 октября 2019

Как можно вернуть значение из подписки? Ниже код выдает исключение

Функция, объявленный тип которой не является ни void, ни any, должна возвращать значение.

getNotificationType(_activatedRouter: ActivatedRoute):Observable<number>{
  _activatedRouter.params.subscribe(params => {
      const menuId = params['id'];
      if (menuId) {
         return this.masterDataService.getNotTypeByMenu(menuId).subscribe(res => {
             if (res){
              return res.notificationType; 
             }
          })
      }
  });
}

1 Ответ

0 голосов
/ 07 октября 2019

Прежде всего: это невозможно, так как вы имеете дело с асинхронными операциями. Одним из способов помочь вам было бы присвоить значение полю вашего класса внутри подписки и сделать вашу функцию типа недействительной.

Похоже, вы неправильно понимаете Observables. Наблюдаемый тип возврата вашей функции означает, что вам нужно возвращать что-то, на что можно подписаться, а не значение полученной подписки.

Если вы хотите получить соответствующий номер, вам следует сначалавсе избегают подписки на наблюдаемое внутри подскрипции, так как это идеальный источник для значительной утечки памяти. Может быть, посмотрите на что-то вроде switchmap. Ваш код в первую очередь может быть изменен на что-то вроде:

getNotificationType$(_activatedRouter: ActivatedRoute):Observable<number>{
   return _activatedRouter.params.pipe(
      switchmap(params => {
          const menuId = params['id'];
          if (menuId) {
             return this.masterDataService.getNotTypeByMenu(menuId);
          } else {
             throwError() // or whatever you need to do in your specific case possibly include a catch
          }
      }));
}

Поскольку вы работаете с Observables, лучше всего подписаться как можно меньше раз, так как это облегчает вашу очистку в конце.

Для вашего конкретного случая было бы полезно узнать, как вы используете номер, который хотите получить.

Не могли бы вы поделиться вашим конкретным использованием, чтобы мы могли разработать для вас конкретное решение?

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