Учитывая количество вложенных обещаний, структурированных аналогично приведенному ниже примеру, возможно ли, если timeout
приведет к delta()
ни к return
, resolve
, ни reject
к timeout
и не throw Error(timeout)
, а каким-то образом выйти из стека вызовов JavaScript и сбросить на новый экран?
- Контекст - это приложение React Native
- Библиотека Nav - это встроенная навигация
- Цель - не
throw Error(timeout)
- Мы не делаем хотите, чтобы ошибка всплывала через цепочку обещаний
- Вложение обещаний происходит в уникальных вариациях в сотнях мест в приложении
- Мы не хотим индивидуально обрабатывать
timeout
ответ / ошибку в каждая точка - Надеясь вместо этого каким-то образом выйти из стека вызовов и сбросить экран
- response-native-navigation имеет множество методов на
setRoot
, navigateToScreen
, et c, но они не выходят из стека вызовов
const alpha = async () => {
try return await bravo()
catch (e) throw Error(e)
}
const bravo = async () => {
try return await charlie()
catch (e) throw Error(e)
}
const charlie = async () => {
try return await delta()
catch (e) throw Error(e)
}
const delta = async () => {
try {
const res = await API()
if (res === timeout) // clearCallStackAndResetToNewScreenDoNotThrowError() POSSIBLE?
else return res
} catch (e) {
throw Error(e)
}
}
const one = async () => {
try {
await alpha()
} catch (e) {
uniqueErrorHandling(e)
}
}
const two = async () => {
try {
await alpha()
} catch (e) {
uniqueErrorHandling(e)
}
}
one()
two()
etc ...