Door is a conditional pattern that is a mix between a promise (two states, open and close) and a state machine (multiple transitions).
A simple comparaison would be a door that has multiple locks. You can't open the door until every locks are unlocked. Moreover, you can close again a door that has been opened.It is really useful for validation (ex: you can submit -open- a form until every required fields -locks- are filled), to reduce the number of 'if' statement or to load async conditions.