首页 > 解决方案 > 回调未触发 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”的回调。

各自的文件:

获取块获取 交易

我在这里想念什么?

标签: node.jspromisecallbackethereumweb3js

解决方案


我不知道为什么它没有被触发。但是一些提示。调用 web3 函数时使用新await语法,因此无需编写回调,代码线性且易于分析。

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

另外,我认为这条线可能会丢失return

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

推荐阅读