code duplication in conditional Promise
You could move the door.locked check into the door.unlock() function (or into a new function) which would allow you return a promise for both cases:

function unlockDoor(door) { 
   return door.locked 
          ? door.unlock()
          : Promise.resolve();
   }  
}

function openDoor(door) {
    unlockDoor(door).then(() =&gt; {
            door.handle.turn();
            door.handle.push();
        });
}