未触发回调 node.js

Callback isn't triggered node.js

可能我在这里遗漏了一些回调和承诺的概念,但我找不到让我的代码工作的方法。

这是它:

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);
    }}
    )
}

基本上,我想得到第一个方法的结果回调以获取每个索引值,并将其传递给第二个方法以扫描该值,在这种情况下是一个获取输入值的以太坊交易。问题是名为 "cb" 的回调没有被触发。

相关文档:

getBlock getTransaction

我在这里错过了什么?

我不知道为什么没有触发。而是一些小窍门。调用web3函数时使用新的await语法,无需编写回调,代码线性化,更易分析。

使用 TypeScript 而不是 JavaScript,因为 TypeScript 编译器可能不允许您编译导致此类错误情况的代码。

此外,我认为这行可能缺失 return:

web3.eth.getTransaction(tx, function(err, cb)

知道了。

问题是我不确定 getInputTransaction

中的参数 cb

let decodeInput = web3.utils.hexToAscii(cb.input) 之前使用 if(cb && cb.input != undefined) 效果很好。