2014-02-27 55 views
1

我在發現Kris Koval Q庫,我遇到了問題。看看這個簡單的代碼:JS Q庫 - 延遲錯誤捕獲

function getPromise1() { 
    var deferred = Q.defer(); 
    setTimeout(function() { 
     console.log('Promise 1 OK'); 
     deferred.resolve(); 
    }, 1000); 
    return deferred.promise; 
} 


function getPromise2() { 
    var deferred = Q.defer(); 
    setTimeout(function() { 
     console.log('Promise 2 Failed'); 
     deferred.reject(); 
    }, 1000); 
    return deferred.promise; 
} 

getPromise1() 
    .then(getPromise2()) 
    .fail(function() { 
     alert('Fail!'); 
    }) 
    .done(); 

我希望看到:

Promise 1 OK 
Promise 2 Failed 

,然後自動顯示警告「失敗!」,但警告從不顯露。而不是我看到我的控制檯中的警告:

[Q] Unhandled rejection reasons (should be empty): ["(no stack) undefined"] 

爲什麼排斥不處理,我該如何處理它?

+0

嘗試增加這個不是結果。 Q.stopUnhandledRejectionTracking();以沉默記錄 – KRUKUSA

+0

我認爲Q.reject應該有一個錯誤實例作爲一個原因。例如'deferred.reject(new Error('rejected'));'? –

+0

警告不是問題。問題是不處理錯誤 - 函數.fail(...)永遠不會被調用。 – luski

回答

1

then功能,你應該通過只是getPromise2功能,getPromise2()

getPromise1() 
    .then(getPromise2)   // NOTE: We are not calling it here 
    .fail(function() { 
     console.log('Fail!'); 
    }) 
    .done(); 
+0

謝謝,你救了我的一天:) – luski

+0

@luski不客氣:)請考慮[接受此答案](http://meta.stackexchange.com/a/5235/235416),如果它可以幫助你:) – thefourtheye