Как правильно сделать subscribe внутри другого subscribe?
не надо так делать, используй flatMapthis
  .openDialog()
  .flatMap(fd=>{
     return !fd?Observable.Empty():this.postsService.add(fd).first();
  })
  .subscribe(post=>{
    this.posts.unshift(post);
  });
можно вот такasync addPost() {
   const formData = await this.openDialog().toPromise();
   if (formData) {
    const res = await this.postsService.add(formData).toPromise();
     this.posts.unshift(res);
   }
  }