Node.js 结构:如何在单个侦听器中侦听多个频道

Node.js 结构:如何在单个侦听器中侦听多个频道,node.js,hyperledger-fabric,Node.js,Hyperledger Fabric,我的代码是基于 侦听器现在只侦听一个频道。我想让它能够收听多个频道 我当前添加侦听器的代码如下: let network, listener for (var i=0; i<channelid.length; i++) { let cid = channelid[i] console.log(`Adding listener for channel ${cid}`) network = await gateway.getNetwork(cid) listen

我的代码是基于

侦听器现在只侦听一个频道。我想让它能够收听多个频道

我当前添加侦听器的代码如下:

let network, listener
for (var i=0; i<channelid.length; i++) {
    let cid = channelid[i]
    console.log(`Adding listener for channel ${cid}`)
    network = await gateway.getNetwork(cid)
    listener = await network.addBlockListener(
        async (event) => {
            await ProcessingMap.set(event.blockData.header.number, event.blockData)
            console.log(`[${cid}] Added block ${event.blockData.header.number} to ProcessingMap`)
        },
        { startBlock: parseInt(nextBlock, 10) }
    )

    console.log(`[${cid}]: Listening for block events, nextblock: ${nextBlock}`)
    processPendingBlocks(ProcessingMap, cid)
};
这是我的输出:

[root@isprintdev nodejs]# node blockEventListener.js
Wallet path: /root/nodejs/wallet
Adding listener for channel dsprintchannel
[dsprintchannel]: Listening for block events, nextblock: 1

Adding listener for channel esprintchannel
[dsprintchannel] Added block 1 to ProcessingMap
[dsprintchannel] Added block 2 to ProcessingMap
[dsprintchannel] Added block 3 to ProcessingMap
[dsprintchannel] Added block 4 to ProcessingMap
[dsprintchannel] Added block 5 to ProcessingMap
[dsprintchannel] Added block 6 to ProcessingMap
[dsprintchannel] Added block 7 to ProcessingMap
[dsprintchannel] Added block 8 to ProcessingMap
[dsprintchannel] Added block 9 to ProcessingMap
[dsprintchannel] Added block 10 to ProcessingMap
[dsprintchannel] Added block 11 to ProcessingMap
[dsprintchannel] Added block 12 to ProcessingMap
[dsprintchannel] Added block 13 to ProcessingMap
[dsprintchannel] Added block 14 to ProcessingMap
[dsprintchannel] Added block 15 to ProcessingMap
[dsprintchannel] Added block 16 to ProcessingMap
[dsprintchannel] Added block 17 to ProcessingMap
[esprintchannel]: Listening for block events, nextblock: 1

[esprintchannel] Added block 1 to ProcessingMap
[esprintchannel] Added block 2 to ProcessingMap
[esprintchannel] Added block 3 to ProcessingMap
[esprintchannel] Added block 4 to ProcessingMap
[esprintchannel] Added block 5 to ProcessingMap
[esprintchannel] Added block 6 to ProcessingMap
------------------------------------------------
我看到两个通道中的块都被添加了,但随后的输出显示只有第一个通道(
dsprintchannel
)中的块正在被处理


我应该如何更改代码,以便处理来自所有通道的数据,而不是仅处理来自第一个通道的数据?

一个问题是ProcessingMap的范围超出了创建侦听器的循环。因此,基本上您只有一个映射,因此一个通道将首先填充ProcessingMap[block_num],然后后续通道将简单地再次设置相同的映射条目。因此,我将移动
让ProcessingMap=newblockmap()
()到(var I=0;I)的
[root@isprintdev nodejs]# node blockEventListener.js
Wallet path: /root/nodejs/wallet
Adding listener for channel dsprintchannel
[dsprintchannel]: Listening for block events, nextblock: 1

Adding listener for channel esprintchannel
[dsprintchannel] Added block 1 to ProcessingMap
[dsprintchannel] Added block 2 to ProcessingMap
[dsprintchannel] Added block 3 to ProcessingMap
[dsprintchannel] Added block 4 to ProcessingMap
[dsprintchannel] Added block 5 to ProcessingMap
[dsprintchannel] Added block 6 to ProcessingMap
[dsprintchannel] Added block 7 to ProcessingMap
[dsprintchannel] Added block 8 to ProcessingMap
[dsprintchannel] Added block 9 to ProcessingMap
[dsprintchannel] Added block 10 to ProcessingMap
[dsprintchannel] Added block 11 to ProcessingMap
[dsprintchannel] Added block 12 to ProcessingMap
[dsprintchannel] Added block 13 to ProcessingMap
[dsprintchannel] Added block 14 to ProcessingMap
[dsprintchannel] Added block 15 to ProcessingMap
[dsprintchannel] Added block 16 to ProcessingMap
[dsprintchannel] Added block 17 to ProcessingMap
[esprintchannel]: Listening for block events, nextblock: 1

[esprintchannel] Added block 1 to ProcessingMap
[esprintchannel] Added block 2 to ProcessingMap
[esprintchannel] Added block 3 to ProcessingMap
[esprintchannel] Added block 4 to ProcessingMap
[esprintchannel] Added block 5 to ProcessingMap
[esprintchannel] Added block 6 to ProcessingMap
------------------------------------------------