Typescript Вложенные Наблюдаемые - PullRequest
0 голосов
/ 12 июня 2019

Справочная информация: Использование rxjs Observables

Я пытаюсь вызвать метод (с наблюдаемой), который вызывает другой метод.Эта текущая настройка не работает для меня со следующей ошибкой компиляции в функции checkIfTrue в сервисе 1 ...

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

//component
//makes call to service
process = () => {
     this.service1.checkIfTrue().subscribe(x => {console.log(x)});
};

//service 1
//makes call to service 2
checkIfTrue = (): Observable<boolean> => {
     this.service2.getInt().subscribe(y => { return y == 1;});
};


//service 2
//makes call to service 2
getInt = (): Observable<number> => {
     return Observable.of(1);
};

Кажется, я не могу вернуть ответ от второго метода ... Как я могу добиться этого?

1 Ответ

1 голос
/ 13 июня 2019
checIfTrue (): Observable<boolean> => {
     this.service2.getInt().subscribe(y => { return y == 1;});
};

У вас есть две функции:

  • checkIfTrue ()
  • y => {return y == 1; }

У вашей второй функции есть оператор return, у вашего checkIfTrue () нет оператора return. Вот почему он не возвращает значение. Просто в качестве примера, это должно прояснить, почему это не может работать:

// y => y == 1 function dummy
function a() {
  return true;
}

// subscribe() dummy
function b(callback: Function) {
  callback();
}

function checkIfTrue() {
  // your subscribe(y => y == 1) line
  b(a);
}

То, что вы ищете, это что-то вроде

checIfTrue (): Observable<boolean> => {
   return this.service2.getInt()
    .pipe(map(y => y == 1));
};

Вы можете сократить это как:

checIfTrue (): Observable<boolean> => this.service2
    .getInt()
    .pipe(map(y => y == 1));
...