Because actions need time to progress. Actions are evaluated after the SKScene's update:
method runs:
(Source: Sprite Kit Programming Guide)
Therefore if you do runAction: the action will not run until after the scene's update method. Depending on whether you run the action somewhere within the update:
message chain, or in didEvaluateActions
or didSimulatePhysics
Sprite Kit may render one frame without having yet run the action.