好的,所以我正在制作一个关注朋友的GUI,我试图从一个带有名字的字符串中使用GetUserIdFromNameAsync。我试图pcall所以我不会得到错误但它返回零,即使它的名字,我知道有效,因为我经常在上面呼吁它。并且它返回打印中的id但是当我尝试pcall然后使用if如果它每次都返回nil并转到我的else语句。
local TeleportService = game:GetService("TeleportService")
script.Parent.OnServerEvent:connect(function(player, id)
place = player.GuiFolder
print(game.Players:GetUserIdFromNameAsync(id))
--ISSUE IN LINE BELOW-- ISSUE IS IN THE LINE BELOW
friend, msg = pcall(game.Players:GetUserIdFromNameAsync(id))
if friend then
print(player.Name, player, player.PlayerGui.MainMenu.Name)
if player:IsFriendsWith(friend) then
place.IsFriend.Value = true
local success, errorMsg, placeId, instanceId = TeleportService:GetPlayerPlaceInstanceAsync(friend)
if success then
place.foundplayerbar.Value = "Found player. Would you like to join?"
place.Activated.Value = true
else enter code here
place.errorbar.Value = "ERROR: Player not online!"
end
else place.errorbar.Value = "ERROR: Not Friends with person!"
end
else place.errorbar.Value = "ERROR: Player doesn't exist!"
end
end)
答案 0 :(得分:1)
根据“Lua编程”电子书:“假设您想运行一段Lua代码并捕获运行该代码时引发的任何错误。您的第一步是将该段代码封装在一个函数中。 .pall函数在保护模式下调用它的第一个参数,以便在函数运行时捕获任何错误。如果没有错误,pcall返回true,加上调用返回的任何值。否则,它返回false,加上错误消息。“
不是直接在函数上调用pcall,而是首先将所有内容封装在函数中:
function func()
friend, msg = game.Players:GetUserIdFromNameAsync(id)
if friend then
...
else
...
end
end
然后你可以用pcall调用函数并捕获任何错误:
local status, err = pcall(func)
if not status then print(err) end
答案 1 :(得分:0)
来自Lua文档:
假设您想运行一段Lua代码并捕获任何错误 在运行该代码时引发。你的第一步是封装它 函数中的一段代码;让我们称之为
foo
...然后,你用pcall调用foo ......
您的代码使用带有函数的pcall,但它调用函数而不是将其用作参数。
要解决此问题,您可以将game.Players:GetUserIdFromNameAsync(id)
放在函数中并将其用作参数,但更简单的方法是使用匿名函数,例如
friend, msg = pcall(function()
game.Players:GetUserIdFromNameAsync(id)
end)
将为您提供正确的价值。