Тут, по-моему, неплохим решением было бы возвращать Promise.
methodName(){
if( hasCachedResponse )
return Promise.resolve(cachedResponse);
return new Promise(resolve=>{
makeRequest().subscribe(response=>{
cacheResponse(response);
resolve(response);
});
});
}