Marco Silva's men went 2-0 up early on in what was a dominant performance from the visitors.
The Lions did pull one back late on through Benik Afobe, who had a chance to equalise straight after, but the Cottagers held on.
Story of the match
Fulham went ahead inside three minutes when Carvalho broke into the box from the left-hand side and found Mitrovic, who slotted home from close range.
Carvalho doubled their lead soon after when Neeskens Kebano played a beautiful through ball to him, allowing the 18-year-old to fire first-time past Bartosz Bialkowski at his near post.
When Kenny Tete won possession for the Cottagers just past the half-hour mark, they broke quickly. Carvalho looked like grabbing his second assist when he played in Ivan Cavaleiro, who could only fire wide.
Fulham defended well throughout the first half and prevented Millwall from creating any chances.
Both managers turned to their bench at the break. Josh Onomah picked up a knock and was replaced by Andre-Frank Zambo Anguissa, while Gary Rowett brought Matt Smith on for Mahlon Romeo and changed to a back four.
It was Silva's side who started on the front foot. Bialkowski made an early double save to deny Mitrovic and Carvalho, with the latter unable to make clean contact from close range.
Carvalho was denied again in the 57th minute by a block from Arsenal loanee Daniel Ballard, who then prevented the youngster from teeing up Mitrovic.
Carvalho continued to cause problems and saw another effort blocked by Jake Cooper before creating chances for Kebano and Cavaleiro. Kebano struck the side-netting while Bialkowski denied Cavaleiro.
Smith gave the Lions an aerial presence and headed over from Murray Wallace's cross before setting up Afobe in the 87th minute.
The 32-year-old flicked on Cooper's long ball forward, and it went into the net via Afobe's head.
Cooper found Abobe straight after the kick-off, but this time his effort was comfortably saved by Paulo Gazzaniga.
The visitors brought defender Alfie Mawson on to try and see the game out, which they did despite a late scare when Cooper beat Gazzaniga to the ball but headed wide.