Spero di essere in grado di personalizzare gli oggetti di errore che vengono passati al client se si verifica un'eccezione sul server.Eccezioni Handlings sul server, personalizzazione dell'argomento fail sul client
sto usando il 'poi' la funzione sul client per gestire il successo e il fallimento:
hub.server.login(username, password).then(function(result) {
// use 'result'
}, function(error) {
// use 'error'
});
Se il login ha successo, 'risultato' è il valore di ritorno del metodo Login sul server. Se l'accesso non riesce, lancio un'eccezione di "CustomException". Questa è un'eccezione con una proprietà 'Codice'.
if (!IsValidLogin(username, password))
throw new CustomException { Code: "BADLOGIN", Message: "Invalid login details" };
Se ho dettagliato eccezioni abilitate, l'argomento 'errore' nel client è 'password non valido' - la proprietà Message dell'eccezione.
Esiste un modo per modificare selettivamente il risultato dell'errore da una stringa a un oggetto complesso? Ad esempio, se "CustomException" viene lanciato in un metodo hub, restituisce un oggetto {Code: [...], Message: [...]} per il gestore fail-out lato client?
Questo dovrebbe dare prova di quello che mi piacerebbe vedere sul client:
hub.server.login(username, password).then(function(userInfo) {
alert("Hello " + userInfo.Name);
}, function(err) {
if (err.Code === "BADLOGIN.USERNAME")
alert("Unrecognised user name");
else if (err.Code === "BADLOGIN.PASSWORD");
alert("Invalid password");
else
alert("Unknown error: " + err.Message);
});
(Si noti il 'Codice' e le proprietà 'messaggio' su 'err').
Perché non si restituisce un oggetto personalizzato invece di generare un errore? –
Semplicemente non sarebbe così pulito. Penso di sapere cosa intendi, una specie di oggetto di ritorno che ha una proprietà 'Result' e 'Error' - una delle quali sarà impostata, una delle quali sarebbe null. L'ho già usato in precedenza, ma mi chiedo solo se un'eccezione potrebbe essere meglio fornita di quella che posso avere il successo e l'accesso fallito si separano automaticamente sul client a causa della natura dei callback "allora". – Barguast
, cioè .then (function (result) {if (result.error) {// failed} else {// success}}); Funzionerebbe, ma non seguirebbe il solito schema di promesse con un ramo separato di successo e fallimento. – Barguast