Events
如何在節點腳本中列印事件日誌和 stopWatching()?
我有以下腳本。我想
stopWatching
在列印事件日誌並自動終止正在執行的節點後執行此操作,但通過腳本我無法實現它。執行.js:
Web3 = require("web3"); web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); exports.LogJob = function( blkNum ) { var event = myContractInstance.LogJob({}, { fromBlock: blkNum, toBlock: blkNum }); event.watch( function (error, result) { console.log( JSON.stringify(result ) ); }); sleep.sleep(10); //without those two lines it prints logs and pauses. event.stopWatching();// } ret = Log.Job( 100000 ); //I cannot return since watching is on.
執行:
node run.js
列印日誌後不會自行終止並像在while()
. 請注意,如果我在呼叫它之後還有其他呼叫,LogJob()
它總是在列印完所有內容後給出它的輸出。所以我不能返回輸出並做一些操作。如果我
stopWatching()
在函式內 10 秒後執行此操作,現在它不會列印任何內容。**$$ Q $$**如何在節點腳本中列印事件日誌和 stopWatching()?
請注意,當且僅當掃描塊上有日誌時,這才有效,否則它會再次暫停。當我們新的輸入成功輸入最新的塊時
process.exit()
。我想出了以下解決方案,它可以工作並解決了掛起的問題:
執行.js:
var fs = require('fs'); fs.unlinkSync("/tmp/test.txt"); Web3 = require("web3"); web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545")); address="0x..." abi=[...] var myContractInstance = web3.eth.contract(mylib.abi).at(mylib.address); var event = myContractInstance.LogJob({}, { fromBlock: blkNum, toBlock: 'latest' }); event.watch( function (error, result) { fs.appendFile( "/tmp/test.txt", JSON.stringify(result) + '\n', function(err) { process.exit(); }); }
執行後
node run.js
我們可以發現輸出如下:cat /tmp/test.txt