doubt regarding Millis

Untested but uses less variables.

unsigned long interval = 3000; //delay

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  unsigned long currentMillis = millis(); // Get current time
  
  while ((millis() - currentMillis) < interval) // Has interval expired?
  {
    while (Serial.available() > 0)  // Any serial data arrived?
    {
      byte value = Serial.read(); // read and discard it
    }
  }
  // Interval is up so next serial read is wanted
}