ИМХО обратный вызов - самое простое решение. Полный обработчик, вероятно, будет лучшим местом для его вызова. Если вы хотите использовать наблюдаемые, я бы придерживался семантики потока.
Если ваша цель - обработать успешный случай, и вы не хотите извлекать данные из функции, тогда вы можете вернуть пустую, завершенную наблюдаемую. В случае ошибки вы можете либо позволить ей пройти, либо заменить ее пустой наблюдаемой, которая заканчивается ошибкой. Это похоже на observable.of(true / false)
, но опирается на семантику потока, а не на произвольные значения.
doSomething() {
return this.http.get('/api/doSomething').pipe(
flatMap(data => {
// do something with data
return empty();
}),
catchError((error) => {
// do something with error
return throwError(error); //instead of error pass whatever you like
})
);
}
callDoSomething() {
this.doSomething()
.subscribe(
undefined, //we don't handle data
undefined, //we don't handle errors
() => {// logic from callback}
);
}
Как видите, кода по-прежнему гораздо больше, чем в решении обратного вызова. Но если вы однажды добавите сообщение об ошибке, это может быть интересным вариантом. Преимущество наблюдаемого решения: нет ifs.