2013-07-09 12 views
14

Ich komme mit Q in das Versprechungsmuster und bekomme immer wieder eine Warnung "[Q] Unbehandelte Ablehnungsgründe (sollte leer sein)" in der Konsole. Was mache ich falsch?Nicht behandelte Ablehnungsgründe (sollte leer sein)

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

Es scheint ein Fehler in Q. Es wird erwartet, dass die Nachricht manchmal protokolliert wird, aber in diesem Fall sollte es ein leeres Array sein. – ForbesLindesay

+0

Es scheint wie ein Fehler mit Q, aber basierend auf meinem Wissen über die Implementierung von Q, ist dies auch unvermeidlich, weil 'catch' tatsächlich ein neues erstellt –

Antwort

12

Basierend auf this confusing discussion es ein Fehlalarm ist.

die Protokollierung verstummen, dies zu tun:

Q.stopUnhandledRejectionTracking(); 

Wenn Sie die Ablehnung nicht erfassen haben es den Fehler werfen würde, so dass Sie es immer noch in der Konsole angezeigt, nachdem Sie den Code oben hinzufügen. JSFiddle: http://jsfiddle.net/homeyer/FpyDr/22/