@vladislav997

Почему не срабатывает catch в try-catch?

Есть такой метод в сервисе:

async send(chainLink, signTransaction) {
    try {
      const web3 = new Web3(chainLink);
      const receipt = await new Promise(async (resolve, reject) => {
        await web3.eth
          .sendSignedTransaction(signTransaction.rawTransaction)
          .on('receipt', (receipt) => {
            resolve(receipt);
          })
          .on('error', (error) => {
            reject(error);
          });
      });

      return {
        status: true,
        data: receipt,
      };
    } catch (e) {
      throw new HttpException(
        {
          status: false,
          message: e.message,
        },
        HttpStatus.INTERNAL_SERVER_ERROR,
        {
          cause: e,
        },
      );
    }
  }


Периодически там возникает ошибка, что в принципе нормально, только вот когда она возникает, я ее вижу в терминале (где запущен nest start --watch), а в постмане выскакивает Error: socket hang up

По логике ошибка должна отлавливаться в catch, и отдаваться как ответ. В чем проблема? Почему catch не срабатывает?

Ошибка, которая выскакивает в терминале:
/Users/mac/Projects/project/node_modules/web3-core-helpers/lib/errors.js:28
        var err = new Error('Returned error: ' + message);
                  ^
Error: Returned error: insufficient funds for gas * price + value
    at Object.ErrorResponse (/Users/mac/Projects/project/node_modules/web3-core-helpers/lib/errors.js:28:19)
    at /Users/mac/Projects/project/node_modules/web3-core-requestmanager/lib/index.js:300:36
    at /Users/mac/Projects/project/node_modules/web3-providers-http/lib/index.js:127:13
    at processTicksAndRejections (node:internal/process/task_queues:95:5)
  • Вопрос задан
  • 146 просмотров
Пригласить эксперта
Ответы на вопрос 1
@semen_ch
фронтенд разработчик
Так как try/catch работает только с кодом из текущего стека вызовов, то он не сможет перехватить то, что вызвалось в другом стеке. Поэтому catch не срабатывает, хотя сама ошибка в консоли появится.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы