Из кода, которым вы делитесь, скажем, обещание A ниже:
promise
.then(gA)
.then(gA)
.then(throwError("A "))
.catch(err => {
l(err.message);
})
и обещание B ниже:
promise
.then(throwError("B "))
.then(gB)
.then(gB)
.catch(err => {
l(err.message);
})
Тогда, как мы знаем асинхронное поведение обещаний, консоль .log всегда завершает выполнение sh, прежде чем, следовательно, он печатает в самом начале, но в то же время обещание A & B уже запущено, но начнет печатать после console.logs.
В соответствии с порядком, т.е. обещание A сначала и обещание Во-вторых, оба падают на свои первые .then, то есть обещание A -> .then (1-е) выполняется, затем обещание b -> .then (1-го), следовательно, оно печатает
"A 1" //no exception called here hence will start execution of next .then
"B 1" //prints from throw called here and remains alive with 1 hence will never allow any of next .then() to execute.
"A 2" // 2nd .then executed
"A 3" // 3rd .then executed followed by throw and again remains alive with 3
Если возникает ошибка, то появляется поймать, а затем "throw" всегда будет в конечном итоге выполнять sh выполнение, так что согласно обещанию заказа A предшествует обещанию B, ниже показано
"Error from promise A 3" // 3 because of last successful increment
"Error from promise B 1" // 1 because of throw did not allow increment
Итак, вот порядок, которому я верю, если .then () возвращает каскадные обещания, то это зависит от времени разрешения ответа.