Цепная ошибка в многоуровневых обещаниях Node.js - PullRequest
0 голосов
/ 05 июля 2019

Я бы хотел объединить разные ошибки, поступающие из обещаний разного уровня, и имеет одну ошибку в последнем улове !

Представьте, что у нас следующая ситуация:

this.methodOne().then( responseOne =>{

    this.methodTwo(responseOne ).then( responseTwo =>{
       console.log(responseTwo );
     }).catch(err => {
      // send err to last catch
      throw err;
     })

 }).catch(err => {
  // Show err one or two
  console.log(err)
})

но не работает

Спасибо

1 Ответ

0 голосов
/ 05 июля 2019

Вы должны вернуть внутреннее обещание для распространения throw.Внутренние обещания добавляются в цепочку только тогда, когда вы возвращаете их из обработчика .then().Когда вы делаете это, они вставляются в цепочку, и их разрешенное или отклоненное состояние - это то, что получает цепочка внешних обещаний.Без return внутренняя цепочка обещаний - это просто собственная независимая цепочка обещаний, которая вообще не связана с внешней.

Итак, измените это:

this.methodOne().then( responseOne =>{

    this.methodTwo(responseOne ).then( responseTwo =>{
       console.log(responseTwo );
     }).catch(err => {
      // send err to last catch
      throw err;
     })

 }).catch(err => {
  // Show err one or two
  console.log(err)
})

наэто:

this.methodOne().then(responseOne => {

    // ADD return on next line to return inner promise
    //    to add this inner promise chain to the outer chain
    return this.methodTwo(responseOne ).then(responseTwo => {
       console.log(responseTwo );
       return responseTwo;       // return this so it becomes the resolved
                                 //   value of parent chain too
     }).catch(err => {
       // send err to last catch
       throw err;
     });

 }).catch(err => {
  // Show err one or two
  console.log(err)
})
...