2017-09-26 19 views
0

ファイバーにネストされた関数呼び出しのカスケードとほとんど同じ2つのsciptがあります。 3回の呼び出しで(blockchainに送信を解析する)エラー:wait.forはファイバー内でのみ呼び出すことができます

この1つは完全に動作し

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

繊維の内部で呼び出すことができます私は問題が何であるか理解していない。これらの2つのスクリプトは同じ構造をしています!私はmapまたはfilterような配列の機能のためにあなたがwait.parallel extensionsを使用する必要があると思う

+0

私がここで何かを忘れていない限り、2番目のスクリプトでファイバーを起動していないだけです( 'wait.launchFiber')。 – d0gb3r7

+0

あなたが正しいです、私は繊維のlauchingを含むことを忘れていたので、コードは次のようになります:wait.launchFiber(watchMempool); function watchMempool(){web3.eth.filter(...)} 私は質問にチャンドを作った。 :-) – jfjobidon

+0

スクリプトがファイバーワークスペースを離れるフィルターを呼び出すと思われる... – jfjobidon

答えて

0

は、すなわちあなたのケースでのようなもの:

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

は(注:私はちょうどweb3.ethを仮定している配列である、そうでない場合、おそらくあなたの質問にもう少しコンテキストを追加するか、より一般的な例に問題を沸かせてください)。

関連する問題