function check(data,key){
if(data.statusText == "error" && data.status == 400 && data.responseJSON.error.errors[0].reason == "keyInvalid")
keys.splice(keys.indexOf(key),1);
else
alert(`Вадиный ключ ${key}`);
if(--checkCount == 0 && keys.length == 0)
alert(`Нет валидных ключей(((`);
}
Больше того, в РНР режим вывода ошибок можно отключить. и он тогда не будет вываливать все ошибки на экран, вот как раз в продакшине когда его отключают, и не правильно настроена вся эта система отлова ошибок и получается, что у пользователя скрипт умирает на половине выполнения.
Посмотреть примеры определения столкновений можно посмотреть тут