2016-08-23 185 views
1

我試圖在同一時間執行所有承諾,所以我可以做一些事情,當他們解決。有一個(強制)被拒絕的承諾,但'$ q.all()'解決。我錯過了一些'$ q.all'的行爲?

在此先感謝!

 function saveOrder() { 

      return ordersSrv.saveOrder(order).then(function(data) { 

       console.log('saveOrder OK'); 
      }, 
      function(error) { 

       console.log('saveOrder KO'); 
      }); 
     } 


     var aPromises = [saveOrder()]; 

     $q.all(aPromises).then(function() { 

      console.log('OK'); 

     }, 
     function (error) { 
      console.log('---> error'); 
     }); 

回答

2

在try catch塊,當你catch錯誤,不重新拋出它 - 它被處理:

try { 
    throw Error(); 
} catch (e) { 
    console.log("Error", e); 
} 
console.log("This log also happens"); 

這是相同的與承諾:

Promise.reject(Error()) 
    .catch(e => console.log("Error", e)) 
    .then(() => console.log("This log also happens")); 

您爲saveError拒收添加捕獲處理程序 - 這意味着您正在處理它。如果你想記錄,但仍不能處理它 - 重新拋出:

try { 
    throw Error(); 
} catch (e) { 
    console.log("Error", e); 
    throw e; 
} 
console.log("This log doesn't happen"); 

或者與承諾:

Promise.reject(Error()) 
    .catch(e => { console.log("Error", e); throw e; }) 
    .then(() => console.log("This log doesn't happen"));