mp.events.addCommand('admin', (player, _, targetPlayer, targetAdminLevel) => {
const targetSocialID = targetPlayer.rgscId;
try {
if (player.adminLevel < 8) throw "Este comando só está disponível para administradores de nível superior a 8.";
if (!targetPlayer) throw "Uso: /admin <ID/NOME> <NÍVEL DE ADMINISTRADOR>.";
if (player.adminLevel <= targetAdminLevel) throw "Não podes promover alguém a um nível superior ao teu.";
if (!global.findPlayer(targetPlayer)) throw "Esse jogador não existe ou não está online.";
if (!targetAdminLevel) throw `Não definiste para que nível pretendes promover ${targetPlayer}.`;
if (isNaN(targetAdminLevel)) throw "O nível de administrador deve ser um número."
}
catch(err) {
player.outputChatBox(`!{${corErro}}${err}`)
}
finally {
console.log("Finally")
}
});
我写了上面的代码。它检查大量的错误。我的问题是:当这些错误都没有发生时,我应该把要执行的代码放在哪里?
如果没有错误,那么这个。
throw
将终止当前执行上下文,并将控制流传递给最近的try
堆栈祖先的关联catch
。因此,如果没有错误,请将语句放在try
的}
:
mp.events.addCommand('admin', (player, _, targetPlayer, targetAdminLevel) => {
const targetSocialID = targetPlayer.rgscId;
try {
if (player.adminLevel < 8) throw "Este comando só está disponível para administradores de nível superior a 8.";
if (!targetPlayer) throw "Uso: /admin <ID/NOME> <NÍVEL DE ADMINISTRADOR>.";
if (player.adminLevel <= targetAdminLevel) throw "Não podes promover alguém a um nível superior ao teu.";
if (!global.findPlayer(targetPlayer)) throw "Esse jogador não existe ou não está online.";
if (!targetAdminLevel) throw `Não definiste para que nível pretendes promover ${targetPlayer}.`;
if (isNaN(targetAdminLevel)) throw "O nível de administrador deve ser um número."
console.log('No errors were found!'); // <---------------------
}
catch(err) {
player.outputChatBox(`!{${corErro}}${err}`)
}
finally {
console.log("Finally")
}
});
您可以为此目的使用一个标志:
mp.events.addCommand('admin', (player, _, targetPlayer, targetAdminLevel) => {
const targetSocialID = targetPlayer.rgscId;
var isSuccess = true;
try {
if (player.adminLevel < 8) throw "Este comando só está disponível para administradores de nível superior a 8.";
if (!targetPlayer) throw "Uso: /admin <ID/NOME> <NÍVEL DE ADMINISTRADOR>.";
if (player.adminLevel <= targetAdminLevel) throw "Não podes promover alguém a um nível superior ao teu.";
if (!global.findPlayer(targetPlayer)) throw "Esse jogador não existe ou não está online.";
if (!targetAdminLevel) throw `Não definiste para que nível pretendes promover ${targetPlayer}.`;
if (isNaN(targetAdminLevel)) throw "O nível de administrador deve ser um número."
}
catch(err) {
isSuccess = false;
player.outputChatBox(`!{${corErro}}${err}`)
}
finally {
console.log("Finally")
}
if (isSuccess) /*Do something here*/;
});
您可以使它更通用:
function catcher(tryHandler, catchHandler, finallyHandler) {
var isSuccess = true;
try {
tryHandler();
}
catch (err) {
isSuccess = false;
catchHandler();
}
finally {
finallyHandler();
}
}
你可以像这样使用它
if (catcher(tryHandler, catchHandler, finallyHandler)) {
//All was successful
} else {
//There was some error
}
您也可以使用Promise API,在if
中实现Promise,并在else
中拒绝它。