错误:wait.for只能在光纤内部调用

时间:2017-09-26 19:09:04

标签: node.js ethereum node-fibers

我有2个scipts几乎相同,嵌套在光纤中的级联函数调用。

这一个(解析区块链中的Tx)有三个调用完美无缺

wait.launchFiber(blockchain)

function blockchain() {
    foreach block {
        parseBlock (blockIndex)
    }
}

function parseBlock(blockIndex) {
    foreach Tx in block {
        parseTx(txHash)
    }
}

function parseTx (txHash) {
    if ( txHashInDB(txHash) ) {
        do something
    }
}

function txHashInDB (txHash) {
    var theTx = wait.forMethod(Tx, 'findOne', {'hash': txHash});
    return (theTx) ? true : false;
}

然后我必须和mempool做类似的事情。在这种情况下,我没有块,只有事务,所以我只有2个调用,我收到此错误消息:

错误:wait.for只能在光纤内部调用

wait.launchFiber(watchMempool);

function watchMempool() {
    web3.eth.filter('pending', function (error, txHash) {
        parseTx(txHash);
    });
}

function parseTx (txHash) {
    if ( txHashInDB(txHash) ) {
        do something
    }
}

function txHashInDB (txHash) {
    var theTx = wait.forMethod(Tx, 'findOne', {'hash': txHash});
    return (theTx) ? true : false;
}

我不明白问题是什么。这两个脚本具有相同的结构!

1 个答案:

答案 0 :(得分:0)

我认为对于像mapfilter这样的数组函数,您需要使用wait.parallel extensions,例如在您的情况下:

function watchMempool() {
    wait.parallel.filter(web3.eth, parseTx);
}

(注意:我只是假设web3.eth是一个数组;如果没有,你应该为你的问题添加更多的上下文,或者尝试将问题归结为更通用的例子。) / p>