For anyone wondering about this:
The solution I found is actually quite simple. Within your node class, create an additional node subservient to the main one
...
public:
sub_node_plan = rclcpp::Node::make_shared("subservient_planning_node");
...
private:
std::shared_ptr<rclcpp::Node> sub_node_plan;
And define the client for this sub_node. This way you can spin the client until result is there and avoid any deadlock or threading issues.