В Угловом проекте я работаю над системой бронирования с множеством различных сценариев. Основываясь на ответе на обещание, он должен попытаться сделать другой звонок на сервер. Это приводит к своего рода обратному обращению - ад, о котором я думал, что обещания могут помешать мне: функции не возвращают ничего, кроме инициирования другой функции.Функциональное программирование с вложенными обещаниями
Вот упрощенное дерево решений:
-
бронирование
1.1 (SucceS) Make - Fetch детали бронирование
- 1.1.1 (успех) - Показать данные бронирования пользователю
- 1.1.2 (обязательно) - Показать кнопку повтора
1,2 (обязательно) - Проверьте ERRORCODE
- 1.2.1, если (ERRORCODE === 'полностью преданных')
- 1.2.1.1 - Попробуйте сделать альтернативные бронирования в
- детали 1.2.1.1.1 (Сукчес) бронирование Load
- 1.2.1.1.1.1 (succces) CheckPriceDifference()
- 1.2.1.1.1.2 (fail) Показывать soldOutMessage();
- 1.2.1, если (ERRORCODE === 'полностью преданных')
1.2.2, если (ERRORCODE! = 'Полностью преданных') * Показать кнопку повтора.
Мой код выглядит примерно так:
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();
}
}
Это хорошая (функция) способ работы с этими 'вложенными' обещания?
я бы не стал винить в этом обещания, ваша логика просто бит – Paarth
Всегда возвращайтесь из обработчика Promise. Иначе обещание, полученное в результате 'makeBooking()', не будет ждать результата от successHandler или errorHandler для разрешения/отклонения. –