Обратный звонок не срабатывает node.js - PullRequest
1 голос
/ 25 апреля 2020

Вероятно, мне не хватает некоторых концепций обратных вызовов и обещаний, но я не могу найти способ, чтобы мой код работал.

Вот оно:

var tx;

web3.eth.getBlock(6339515, function(err, result){
    for(var i = 0; i <= result.transactions.length; i++){
        tx = result.transactions[i];
        getInputTransaction(tx)
        .then(function() {} )
        .catch(function(error) {
            console.log('error: \n' + error);
        });
    }
})

async function getInputTransaction(tx) {
    web3.eth.getTransaction(tx, function(err, cb){
        console.log('got here');
        let decodeInput = web3.utils.hexToAscii(cb.input);
        decodeInput = decodeInput.split("_").pop();
        if(!err){
            console.log(cb);
            console.log('\nInput decoded: ' + '\u001b[1;32m' + decodeInput + '\u001b[0m');
        }else{
            console.log('error: ' + error);
    }}
    )
}

По сути, я хочу получить обратный вызов результата первого метода, чтобы получить каждое значение индекса при передаче его второму методу для сканирования этого значения, в данном случае это транзакция ethereum для получения входного значения. Проблема в том, что обратный вызов с именем «cb» не запускается.

Соответствующая документация:

getBlock getTransaction

Что мне здесь не хватает?

Ответы [ 2 ]

1 голос
/ 25 апреля 2020

Я не знаю, ответ прямо, почему он не срабатывает. Но несколько советов. Используйте новый синтаксис await при вызове функций web3, поэтому вам не нужно писать обратные вызовы, а код будет линейным и его легче анализировать.

Используйте TypeScript вместо JavaScript, так как компилятор TypeScript может не позволить вам скомпилировать код, который приводит к ошибочным ситуациям, подобным этому.

Кроме того, я думаю, что эта строка может отсутствовать return:

web3.eth.getTransaction(tx, function(err, cb)
0 голосов
/ 27 апреля 2020

Понял.

Проблема была в том, что я не гарантировал, что параметр cb в getInputTransaction

С if(cb && cb.input != undefined) до let decodeInput = web3.utils.hexToAscii(cb.input) работает хорошо.

...