I always used your method, a delay… BUT I ended up with this approach (uses c++):
class UCustomSpringArmComponent : public USpringArmComponent {
GENERATED_BODY()
public:
// This resets the target arm component location to the location of the arm component
UFUNCTION(BlueprintCallable)
void ResetArmTargetLocation() {
// Using this, the change is instant, no need for a delay.
UpdateDesiredArmLocation(false, false, false, 0 /* not used inside */);
}
};