2016-08-23 107 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"));