Как избежать UnhandledPromiseRejectionWarning в узле - PullRequest
0 голосов
/ 22 октября 2019

Мне нужно протестировать какое-то веб-приложение на основе JSON / RPC с различными комбинациями значений. Некоторые значения вызывают ошибку (как и ожидалось). Теперь я просто хочу продолжить тестирование с сохранением ошибки / исключения (броски во время выполнения). Например, согласно заданному коду

    const abcWeb = require('abc-web');
const abcWeb = new abcWeb('http://testnet-jsonrpc.abc-xyz.org:12537');

const abTx = require('abc-transaction');
var n = 12;
var gp = 10;
var gl = 21000;
var to = '5989d50787787b7e7';
var value = 70;
var limit = 4;
var i=1;
while (i<limit){

  try{
const tx = new abTx({
    n: n,
    gp: gp,
    gl:gl , 
    to: to, 
    value:value ,
  });

    abTx.sign(Buffer.from('8f2016c58e898238dd5b4e00', 'hex'));
    abcWeb.abx.sendSignedTransaction('0x' + tx.serialize().toString('hex'));
    console.log(abTx);

  } catch (exception) {
    var message = exception.message;
    console.log(message);
    continue;

  }
  finally {
    i++;
    n +=1;
    gp +=1;
    gl +=1;
    abcWeb.abx.getENumber().then(console.log);
  }
}

Но когда произошла ошибка UnhandledPromiseRejectionWarning, узел остановит выполнение. Можно ли обойти UnhandledPromiseRejectionWarning ошибку? Как сделать цикл для таких ошибок, чтобы пропустить? Ошибка UnhandledPromiseRejectionWarning обычно возникает после функции sign и / или sendSignedTransaction. Я просто хочу ее обойти.

Ответы [ 2 ]

2 голосов
/ 22 октября 2019

Вы можете добавить обработчик для события unhandledRejection:

process.on('unhandledRejection', error => {
  // handle error ... or don't
});

См. https://nodejs.org/api/process.html#process_event_unhandledrejection
и https://developer.mozilla.org/en-US/docs/Web/API/Window/unhandledrejection_event

0 голосов
/ 22 октября 2019

catch (err) не может отловить UnhandledPromiseRejectionWarning ошибку от Promise при использовании .then(). Вы можете изменить его на стиль await myPromise() или .catch обещание.

Пример: это приведет к ошибке UnhandledPromiseRejectionWarning

async function test() {
    throw new Error()
}

;(async function main() {
    try {
        test().then(console.log)
    } catch (err) {
        console.log('caught it', err);
    }
})()

Это не будет:

async function test() {
    throw new Error()
}

;(async function main() {
    try {
        test().then(console.log)
            .catch(() => {})
    } catch (err) {
        console.log('caught it', err);
    }
})()

Это также не будет

async function test() {
    throw new Error()
}

;(async function main() {
    try {
        await test()
    } catch (err) {
        console.log('caught it', err);
    }
})()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...