This is an issue around that all redirect functions will throw an exception due to the 'breaking' from the script. There are a couple ways to get around this, please see this SFSE post that recently experienced the same issue or check out a post I made on HowToSFMC.com about this as well as other potential pitfalls with Try/Catch.
Basic synopsis of the issue:
It appears this is a well documented .Net issue revolving around that Redirects will throw a ‘ThreadAbort’ exception, which would trigger the catch block to run instead. Now SFMC SSJS does not have all the great exception handling capabilities that you can see in languages like .Net.
and my recommended solution:
<script runat="server">
var redirect = 'https://google.com'
try{
Platform.Response.Redirect(redirect)
} catch(e) {
var desc = e.description; //Pulls the description from error object
if(desc.indexOf("ExactTarget.OMM.AMPScriptRedirectException") > -1) {
Platform.Response.Write(desc) //This is arbitrary as will not be run
} else {
redirect = 'https://yahoo.com'
Platform.Response.Redirect(redirect)
}
}
</script>
By throwing the redirect into an if statement, you remove it from being processed if the exception thrown is just from the redirect, it will instead only be processed for other exceptions.