Web3js
Web3 讓 NodeJS 等到承諾在訂閱中得到解決?
我有以下程式碼:
import Web3 from 'web3'; function waitForFunds() { let web3 = new Web3(new Web3.providers.HttpProvider('http://localhost:7545')); return new Promise((resolve, reject) => { web3.eth.subscribe('pendingTransactions').on("data", resolve); }); }; (async function () { await waitForFunds(); console.log('Waiting'); })();
我希望 nodeJS 一直等到 waitForFunds() 返回的承諾得到解決,但相反,NodeJS 只是立即退出,而不是等待訂閱在接收數據時解決承諾。控制台從不記錄“等待”。我做錯什麼了嗎?
為了訂閱事件,您需要一個 Websocket 端點。這是您更新為使用 WSS 的程式碼:
var Web3 = require('web3') async function waitForFunds() { let web3 = new Web3( new Web3.providers.WebsocketProvider( 'wss://your-websocket-endpoint/12345' ) ) return new Promise((resolve, reject) => { web3.eth.subscribe('pendingTransactions').on('data', resolve) }) } waitForFunds() console.log('Waiting')
此外,如果您想列出待處理的交易,您可以使用以下內容:
var Web3 = require('web3') const main = async () => { var web3 = new Web3( new Web3.providers.WebsocketProvider( 'wss://your-websocket-endpoint/12345' ) ) var subscription = web3.eth .subscribe('pendingTransactions', async (error, result) => { if (error) console.log('error', error) }) .on('data', async (transaction) => { console.log('TRX >>', transaction) const trxDetails = await web3.eth.getTransaction(transaction) console.log('trxDetails', trxDetails) }) } main()
您可以使用Chainstack獲取多個區塊鏈協議的 HTTP 和 WSS 端點。
我認為你的函式
waitForFunds
應該是非同步的,以便等待 Promise 解決:async function waitForFunds() {}