0

我有 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;
}

然后我必须对内存池做类似的事情。在这种情况下,我没有块,只有交易,所以我只有 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;
}

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

4

1 回答 1

0

我认为对于数组函数,map或者filter你需要使用wait.parallel extensions,即在你的情况下是这样的:

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

(注意:我只是假设web3.eth是一个数组;如果不是,您可能应该为您的问题添加更多上下文,或者尝试将问题归结为更通用的示例)。

于 2017-09-26T20:48:47.383 回答