下面的代碼返回每個的getJSON方法的RSVP承諾:廢渣處理的承諾
getJSON('/login')
.then(getJSON('/errors').then(function(users) {
self.user = users;
}))
.then(getJSON('contacts').then(function(contacts) {
self.contacts = contacts;
}))
.then(getJSON('companies').then(function(companies) {
self.companies = companies;
callback(self);
}, function(err){
console.log('does not get here')
}));
我承諾的理解顯然是錯誤的,我不想爲每個錯誤回調然後,而是我認爲該錯誤將被轉發到下一個隨後的函數之一中的下一個可用的錯誤回調。
在上面的代碼中,第2行上的getJSON將被拒絕,但它不會被轉發到最後一次的錯誤回調。
我必須爲每個提供一個錯誤回調。這與回調地獄沒有任何區別。
+1這個答案看起來像是有正確的想法,請考慮澄清一下(目前這有點「文字牆」)。另外,我更喜歡'.catch'而不是',function(err){' –
你是對的,但是這裏有點晚了。我會盡力解釋明天會更好。順便說一句,我不知道RVSP具體實現了promise/A +,所以我不知道它有一個特定的.catch()方法。 –
儘管對於所有承諾/ A +實現並非如此,事實上絕大多數承諾庫(以及DOM期貨和原生ES6承諾)都有一個'.catch'方法。 [Q](http://goo.gl/FkIfne),[$ q](http://goo.gl/qF6M4q),[RSVP](http://goo.gl/0310T1),[藍鳥]( http://goo.gl/rTpHxX),[when](http://goo.gl/2VZduJ)和[native](http://goo.gl/FtXLM4)都可以。 –