Выйти, сбросить или очистить стек вызовов JavaScript без выброса Ошибка? - PullRequest
0 голосов
/ 07 мая 2020

Учитывая количество вложенных обещаний, структурированных аналогично приведенному ниже примеру, возможно ли, если 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 ...  
...