В проекте Angular я работаю над системой бронирования с множеством различных сценариев. Основываясь на ответе на обещание, он должен попытаться сделать другой звонок на сервер. Это приводит к своего рода обратному обращению - ад, о котором я думал, что обещания могут помешать мне: функции не возвращают ничего, кроме инициирования другой функции.
Вот упрощенное дерево решений:
Сделать заказ
1.1 (succes) - Получить информацию о бронировании
1.2 (сбой) - Проверить код ошибки
1.2.2 if (errorCode! = 'Soldout') * Показать кнопку повтора.
Мой код выглядит примерно так:
makeBooking()
.then(function(response){
succesHandler(response);
}, function(error){
errorHandler(response);
})
succesHandler(response){
loadDetails(response)
.then(function(details){
showDetails(details);
}, function(error){
handleDetailsError(error);
}
}
errorHandler(response){
if ( checkSoldout(reponse) ){
makeAlternativeBooking();
}
}
Является ли это хорошим (функциональным) способом работы с этими "вложенными" обещаниями?
ваш поток расходится в каждой точке, незначительные изменения могут быть внесены в ваш код, за исключением того, что его можно немного сократить:
makeBooking().then(succesHandler, errorHandler)
succesHandler(response){
loadDetails(response)
.then(showDetails, handleDetailsError)
}
errorHandler(response){
if ( checkSoldout(reponse) ){
makeAlternativeBooking();
}
}
makeBooking()
обещание, полученное отmakeBooking()
, не будет ждать, пока результат, полученный от successHandler или errorHandler, сам себя разрешит / отклонит.