1

我没有收到任何事件通知,我想知道我是否遗漏了什么。我按照 Fabric Composer 网站上的说明在我的 cto 模型中定义了 BasicEvent,并添加了用于在事务中创建和发出事件的代码并更新了网络。我创建了一个单独的 eventListener.js 程序,该程序使用来自网站的代码示例使用 businessNetworkConnection 订阅事件。
在我启动我的 eventListener.js 应用程序后,它似乎正在监听(在控制台中接收到连接状态消息后,没有其他任何事情发生......它不会回到正常的提示行。)然后我执行应该发出的事务该事件并成功运行,但在运行 eventlistener.js 的另一个终端窗口中未收到任何事件。
这是 eventListener.js 程序的关键部分:

businessNetworkConnection.connect(connectionProfile, businessNetworkIdentifier, participantId, participantPwd)
.then((result) => {
    businessNetworkDefinition = result;
    console.log('Connected: BusinessNetworkDefinition obtained=' + businessNetworkDefinition.getIdentifier());
  });
businessNetworkConnection.on('event', (event) => {
    // event: { "$class": "org.namespace.BasicEvent", "eventId": "0000-0000-0000-000000#0" }
    console.log(event);
  });

businessNetworkConnection.on('event', (event) ... 命令是否应该导致程序在侦听时出现挂起?
如果是这样,是否可以采取其他措施来解决问题所在?
我' m 在本地 Docker 上使用 v0.6 HLF。

4

2 回答 2

0

我为 Hyperledger 团队开发的基本示例应用程序编写了示例代码。您可以查看以下代码片段:SampleEventListener

于 2017-09-06T17:45:54.420 回答
0

我认为您的问题是您在注册侦听器之前不要等待连接 businessNetworkDefinition。请记住,该then块是异步执行的,您的以下businessNetworkConnection.on代码将立即执行。

在连接 businessNetworkDefinition,您应该添加第二个then块来注册您的侦听器。

例如

return adminConnection.connect('hlfv1', 'admin', 'adminpw')
    .then(() => {
        return BusinessNetworkDefinition.fromDirectory(path.resolve(__dirname, '..'));
    })
    .then((businessNetworkDefinition) => {
        return adminConnection.deploy(businessNetworkDefinition);
        // return true;
    })
    .then(() => {
        businessNetworkConnection = new BusinessNetworkConnection();
        return businessNetworkConnection.connect('hlfv1', 'my-network', 'admin', 'adminpw');
    })
    .then(() => {
        businessNetworkConnection.on('event', (event) => {
            console.log( '****** received the event ' + JSON.stringify(businessNetworkConnection.getBusinessNetwork().getSerializer().toJSON(event)));
        });
    });
于 2017-05-30T13:23:43.393 回答