Sto scrivendo un'API per il mio sistema, che sta inviando un XHR al server e restituisce una promessa che dovrebbe essere gestita dal chiamante - finora così buono.Promises e istruzioni generiche .catch()
Per ogni chiamata API devo usare un .then
e .catch
chiamate, ma di solito (come il 75% del tempo) il .catch
riferimenti la stessa funzionalità che stampa semplicemente utilizzando console.error
.
La mia domanda è - C'è un modo per allegare un'istruzione di cattura predefinita per ogni promessa che creo? (che diciamo stampe alla console), e per ogni promessa che vorrei gestire ulteriormente il rifiuto, aggiungerei un'altra chiamata .catch
(o addirittura la sostituirò)?
esempio semplificato in cui ogni chiamata ha il suo .catch: http://jsbin.com/waqufapide/edit?js,console
non la versione che cerca di implementare il comportamento desiderato di lavoro: http://jsbin.com/nogidugiso/2/edit?js,console
Nel secondo esempio, invece di tornare deferred.promise
, mi restituisce un promettere con annessa catch()
gestore:
return deferred.promise.catch(function (error) {
console.error(error);
});
funzioni Sia then
catture e then
sono chiamati in quel caso.
Mi rendo conto del Q espone l'evento getUnhandledReasons()
funzione ed onerror
, ma io in realtà non desidera utilizzare .done()
per ogni promessa né costruire una sorta di timer/intervallo di gestire l'elenco di rifiuti non-trattati.
Altre librerie come bluebird espongono gli eventi onPossiblyUnhandledRejection
, che devo ammettere è una soluzione un po 'più bella, ma ancora non proprio quello che sto cercando.
Q supporta 'process.on ('unhandledRejection'' dal 1.3, sfortunatamente non ho avuto il tempo di scriverlo per i browser - le richieste pull sarebbero benvenute. Raccomando caldamente bluebird :) –
Perché "onPossiblyUnhandledRejection" non è quello che stai cercando?No, non c'è modo di associare i gestori di errori a * ogni * promessa, e non lo si vuole comunque, ma non esiste un modo reale per rilevare automaticamente i fini della catena di promessa (non meglio di "possibilmente non gestito ..."). – Bergi
@Bergi Sto generando automaticamente tutte le mie promesse in un posto centrale, quindi avrei potuto essere utile semplicemente allegare un gestore di default 'catch'. –