I see uour point and your absolutely right. But then again, if you're to use pipe to chain in a set of functions, then the takeUntil() approach works, right? Idea behind usage of the async pipe was to make it less verbose as opposed to the approaches mentioned ahead of it.
"...deally you don't manipulate data in subscribe() anyway..." - I don't think I completely follow this. Having a variable into which you resolve data from the subscription and then working on it if need be before relaying it the template is common practice, right? Or am I missing something?