2013-07-09 10 views
14

Sto entrando nel modello delle promesse con Q e continuo a ricevere avviso "[Q] Motivi di rifiuto non gestito (dovrebbe essere vuoto)" in console. Che cosa sto sbagliando?Motivi di rifiuto non gestito (dovrebbe essere vuoto)

http://jsfiddle.net/FpyDr/1/

function load(url) { 
    var deferred = Q.defer(); 

    $.ajax({ 
     type: "GET", 
     processData: false, 
     dataType: "html", 
     url: url, 
     cache: false 
    }).done(function (response, status, xhr) { 

     deferred.reject(new Error("test error")); 

     return; 
    }).fail(function (xhr, status, error) { 

     deferred.reject(new Error("ajax failed")); 

     return; 
    }); 

    return deferred.promise; 
} 

load("http://fiddle.jshell.net") 
    .then(function (result) { 
     console.log("got result", typeof(result)); 
    }) 
    .catch(function (error) { 
     console.log("got error", error); 
     return true; 
    }) 
    .done(); 
+0

Sembra un bug in Q. Si prevede che il messaggio venga talvolta registrato ma, in questo caso, dovrebbe essere un array vuoto. – ForbesLindesay

+0

Sembra un bug con Q, ma in base alla mia conoscenza dell'implementazione di Q, questo è anche inevitabile perché "catch" crea effettivamente un nuovo –

risposta

12

Basato su this confusing discussion si tratta di un falso positivo.

di mettere a tacere la registrazione si può fare questo:

Q.stopUnhandledRejectionTracking(); 

Se non si cattura il rifiuto sarebbe buttare l'errore, quindi ci si può comunque vedere nella console dopo l'aggiunta del codice di cui sopra. JSFiddle: http://jsfiddle.net/homeyer/FpyDr/22/