In my addon DynamicCam, the user can create custom situations including lists of events when to check the situation conditions.
If the user enters non-existent events, I want to show them my own error message. So I am using pcall() around RegisterEvent() to catch the errors of non-existent events.
This seemed to work quite well. But during the addon startup the event-registering function may be called more than once. It seems that with a second try, the non-existing events are registered!
Here is a minimal working example:
Lua Code:
local folderName = ...
DynamicCam = LibStub("AceAddon-3.0"):NewAddon(folderName, "AceEvent-3.0")
function DynamicCam:EventHandler(event)
print("EventHandler not doing anything", event)
end
local event = "nonExistingEvent"
-- First try fails with error message as expected.
local result = {pcall(function() DynamicCam:RegisterEvent(event, "EventHandler") end)}
if result[1] == false then
print("Did not register event:", event)
print("Error:", result[2])
else
print("Registered event:", event)
end
-- Second try succeeds!!
print("Try again!")
result = {pcall(function() DynamicCam:RegisterEvent(event, "EventHandler") end)}
if result[1] == false then
print("Did not register event:", event)
print("Error:", result[2])
else
print("Registered event:", event)
end
-- Will lead to error, trying to unregister nonExistingEvent:
DynamicCam:UnregisterAllEvents()
Why is the second try not exactly like the first one?
If I use RegisterEvent(event) instead of RegisterEvent(event, "EventHandler"), it is like that!