你能给我解释一下为什么下面的代码两次收到相同的trx哈希吗?你有什么建议来避免这种情况吗?
var Web3 = require('web3')
const web3Subs = new Web3(new Web3.providers.WebsocketProvider('wss://mainnet.infura.io/ws/v3/XXX'))
const web3Trx = new Web3(new Web3.providers.WebsocketProvider('wss://mainnet.infura.io/ws/v3/XXX'))
const subscription = web3Subs.eth.subscribe('pendingTransactions')
subscription.subscribe((error, txHash) => {
if (error) console.log(error);
console.log(txHash + " received.");
})
输出:
0x98219dad048aef55649d334a42c69ad094d3be1378f68b294aeaa2ef49ae2f97 received.
test.js:10
0x98219dad048aef55649d334a42c69ad094d3be1378f68b294aeaa2ef49ae2f97 received.
test.js:10
0x7f19d86f3c08c171060b0c29c0ad889dd7b2e69188ff6c8314caa4fb65e5b6a0 received.
test.js:10
0x7f19d86f3c08c171060b0c29c0ad889dd7b2e69188ff6c8314caa4fb65e5b6a0 received.
发布于 2020-01-24 04:15:04
看起来不像是web3问题,而是RxJS问题,或者你用来进行订阅调用的任何库……你订阅了两次,所以我想这就是为什么你会看到东西被触发了两次。
const subscription = web3Subs.eth.subscribe('pendingTransactions'); // You subscribe here
subscription.subscribe((error, txHash) => { // And you subscribe again to that subscription
if (error) console.log(error);
console.log(txHash + " received.");
})
我想,如果你这样写的话,这可能会给你带来更好的结果,因为你不需要两次订阅,并且仍然将订阅分配给一个变量,以防你需要引用它:
const subscription = web3Subs.eth.subscribe((error, txHash) => {
if (error) console.log(error);
console.log(txHash + " received.");
});
https://stackoverflow.com/questions/59849518
复制相似问题