a spider using pathfinding to walk towards me, ends up either walking in a circle around me or walks a bit towards me, turns around 180 then turns around 180 again and starts walking towards me, the result depends if i use :Wait() or not

local players = game:GetService("Players")
local pathfinding = game:GetService("PathfindingService")
local maxdistance = 50
local distance = math.huge
local path = pathfinding:CreatePath()
local spider = script.Parent
local walkTo
local function walk(target)
	pcall(function()
		path:ComputeAsync(spider.Body.Position,target.Position)
		local waypoints = path:GetWaypoints()
		for i,v in pairs(waypoints) do
			local part = Instance.new("Part")
			part.Parent = game:GetService("Workspace")
			part.CFrame = CFrame.new(v.Position)
			part.CanCollide = false
			part.Anchored = true
			part.Size = Vector3.new(3,3,3)
			spider.Humanoid:MoveTo(v.Position)
			print("next")
		end
	end)
end
path.Blocked:Connect(function()
	print("blocked")
	spider.Humanoid:MoveTo(spider.Body.Position)
	walk(walkTo)
end)
while true do
	wait()
	for i,v in pairs(players:GetPlayers()) do
		if v.Character and v.Character:FindFirstChild("HumanoidRootPart") then
			local humanoidroot = v.Character.HumanoidRootPart
			local playerdistance = (humanoidroot.Position - spider.HumanoidRootPart.Position).Magnitude
			if playerdistance < distance then
				distance = playerdistance
				--print("got distance")
			end
		end
	end
	for i,v in pairs(players:GetPlayers()) do
		if v.Character and v.Character:FindFirstChild("HumanoidRootPart") then
			local humanoidroot = v.Character.HumanoidRootPart
			if (humanoidroot.Position - spider.HumanoidRootPart.Position).Magnitude == distance and (humanoidroot.Position - spider.HumanoidRootPart.Position).Magnitude <= maxdistance then
				distance = math.huge
				walkTo = humanoidroot
				walk(humanoidroot)
			end
		end
	end
	distance = math.huge
end

video of the results https://imgur.com/a/Lo9L5UV