Lancio di un errore nell’object rinviato di jQuery

Ho una promise $.ajax e voglio verificare se la mia risposta (sintatticamente valida) contiene un errore, innescando lo stato rifiutato in quel caso.

Ho lavorato con la mia libreria di promesse che tratta facilmente tali compiti. Non mi piace l’implementazione di jQuery’s Promise ( cache ) con il suo object Deferred e forse ho trascurato qualcosa, perché raramente lo uso. Penso che la strada da percorrere sia semplicemente usando .then() , che sembra essere piuttosto complicato:

 return $.ajax(...).then(function success(response) { var problem = hasError(response); if (problem) { var error = new $.Deferred; error.reject(problem); return error; } else return response; }); 

Questo dovrebbe restituire una promise che viene respinta in caso di errori di rete o problemi con la risposta. Ma la restituzione di un rinvio rifiutato è davvero la [solo | migliore | più corta] strada da percorrere?

Avrei anche apprezato l’aiuto su come gestire questi “gestori di risposte che lanciavano errori” nelle opzioni ajax, non sono riuscito a trovare una buona documentazione su di loro.


Disclaimer: No, non posso cambiare le risposte del server. Il metodo di rilevamento dei problemi è sincrono. Non voglio usare altre librerie, sono particolarmente interessato al modo in cui jQuery risolve questo problema.