Skip to content

Instantly share code, notes, and snippets.

@ipetropolsky
Last active February 26, 2021 01:19
Show Gist options
  • Save ipetropolsky/ebef64e4463c133f8c1637683682630d to your computer and use it in GitHub Desktop.
Save ipetropolsky/ebef64e4463c133f8c1637683682630d to your computer and use it in GitHub Desktop.
Как не получить Uncaught in Promise

Как не получить Uncaught in Promise

  • Если обрабатываем промис и возвращаем его, в onRejected возвращаем Promise.reject(error) либо не используем onRejected, чтобы в любом случае была возможность обработать reject снаружи.
    const load = () => {
      return fetcher.get('/url')
        .then(
          (data) => {
            // Do something
            return data;
          },
          (error) => {
            // Do something
            return Promise.reject(error);
          }
        );
    }
    load().then(
      (data) => console.log('Done!', data),
      (error) => console.log('Error!', error)
    );
    const load = () => {
      return fetcher.get('/url')
        .then((data) => {
          // Do something
          return data;
        });
    }
    load().then(
      (data) => console.log('Done!', data),
      (error) => console.log('Error!', error)
    );
  • Если обрабатываем промис и НЕ возвращаем его, пишем в onRejected console.error, чтобы избежать эксцепшена Uncaught in Promise и при этом узнать об ошибке.
    const load = () => {
      fetcher.get('/url')
        .then(
          (data) => {
            // Do something
          },
          console.error
        );
    }
  • Чтобы не усложнять, можно сохранить промис в переменную, на неё навесить then с обработкой, где есть onRejected либо console.error, а вернуть исходный промис.
    const load = () => {
      const promise = fetcher.get('/url');
      promise.then(
        (data) => {
          // Do something
        },
        (error) => {
          // Do something
        }
      );
      return promise;
    }
    load().then(
      (data) => console.log('Done!', data),
      (error) => console.log('Error!', error)
    );
  • Не используем catch после then, чтобы эксцепшены из onFilfilled попали в Sentry.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment