Something like this maybe? The idea being that you move the player each frame at the start of the method, and then check how close the player is to the target position. If they’re not close enough, you return before checking for the next input. You only really need to check the absolute x val, but I used .Distance to keep things nice and simple.
void Update()
{
var maxDistance = maxSpeed * Time.deltaTime;
transform.position = Vector2.MoveTowards(transform.position, lanePosisition[currentLane], maxDistance);
float minDistanceBeforeNextMove = 0.1f;
if (Vector2.Distance(transform.position,lanePosisition[currentLane]) > minDistanceBeforeNextMove) return;
if (Input.GetKeyDown(KeyCode.A))
{
currentLane--;
if (currentLane < 0)
{
currentLane = 0;
}
}
if (Input.GetKeyDown(KeyCode.D))
{
currentLane++;
if (currentLane > 2)
{
currentLane = 2;
}
}
}