Re: https://github.com/tildeio/rsvp.jsCome rsvp.js maniglie respinti promessa con catena di callback guasto
ho una funzione chiamata doSomething(), che fa qualcosa per un po 'e poi restituisce un RSVP.Promise. Quindi, una catena di callback riusciti e non riusciti è registrata con la promessa restituita (vedere il codice seguente). Il comportamento che mi aspettavo è stato, se la promessa è soddisfatta, la catena di callback di successo registrati con la promessa verrà licenziata, e se la promessa viene respinta (non riesce), la catena di callback di errori fallirà.
Ho il comportamento previsto per quando la promessa è soddisfatta, ma ottengo un comportamento diverso da quello che mi aspettavo quando la promessa è stata respinta. Cioè, i callback di successo sono concatenati e l'output di una callback riuscita viene passato a il prossimo callback di successo nella catena. Ma sembra che le callback di errore non siano concatenate. Si comportano quasi come il fermo in un blocco try/catch (vedi codice e output di seguito).
Qualcuno può spiegare questo comportamento? È davvero così che si suppone che funzioni, oppure è questo un errore nel modo in cui rsvp.js gestisce una promessa rifiutata/fallita che ha una catena di callback di errore registrati con esso? Sto leggendo ora le specifiche Promises/A + per cercare di capirlo, ma se qualcuno conosce questa roba dalla testa, mi piacerebbe sentire la tua spiegazione. Grazie in anticipo.
jsfiddle: http://jsfiddle.net/rylie/VYSj7/2/
doSomething() // returns an RSVP.Promise object
.then(
function(message) { console.log("then success 1: " + message); return "from success 1"; }, // success callback
function(message) { console.log("then failure 1: " + message); return "from failure 1"; } // failure callback
)
.then(
function(message) { console.log("then success 2: " + message); return "from success 2"; }, // success callback
function(message) { console.log("then failure 2: " + message); return "from failure 2"; } // failure callback
)
.then(
function(message) { console.log("then success 3: " + message); return "from success 3"; } // success callback
)
.then(
null,
function(message) { console.log("then failure 4: " + message); return "from failure 4"; } // failure callback
)
.then(
function(message) { console.log("then success 5: " + message); return "from success 5"; }, // success callback
function(message) { console.log("then failure 5: " + message); return "from failure 5"; } // failure callback
);
** Quando la promessa si compie (riesce), questo è l'uscita ottengo e prevede:
then success 1: Promise fulfilled!
then success 2: from success 1
then success 3: from success 2
then success 5: from success 3
** Quando la promessa viene rifiutata (fallisce), questo è il risultato che ottengo:
then failure 1: Promise rejected!
then success 2: from failure 1
then success 3: from success 2
then success 5: from success 3
** questo è quello che mi aspettavo (su una respinta/Promessa fallito):
then failure 1: Promise rejected!
then failure 2: from failure 1
then failure 4: from failure 2
then failure 5: from failure 4
bella spiegazione, Esailija! Grazie. – RBR