如何使用/消费来自wolkenkit-eventstore的事件流

时间:2019-04-17 13:49:34

标签: wolkenkit

我想使用wolkenkit的eventstore,并试图建立一个简单的例子。但是我不能简单地输出事件流。

简化示例:

const eventstore = require("wolkenkit-eventstore/inmemory");
const Stream = require("stream");
const uuidv4 = require("uuid/v4");
const Event = require("commands-events/dist/Event");

const main = async () => {
    await eventstore.initialize();

    const aggregateId = uuidv4();
    const event = new Event({ ... });
    event.metadata.revision = 1;

    await eventstore.saveEvents({ events: event });

    const writableStream = new Stream.Writable();
    writableStream._write = (chunk, encoding, next) => {
        console.log(chunk.toString());
                next()
    };

    const readableStream = eventstore.getUnpublishedEventStream();
    readableStream.pipe(writableStream);
};

main();

据我了解, getUnpublishedEventStream 返回可读的流。我遵循了this的说明,但是没有按预期运行。 我得到的只是以下错误:

(node:10988) UnhandledPromiseRejectionWarning: TypeError: readableStream.pipe is not a function

1 个答案:

答案 0 :(得分:0)

根据documentation of wolkenkit-eventstoregetUnpublishedEventStreamasync函数,即您必须使用await对其进行调用。否则,您将无法获得返回的信息流,而是一个承诺(并且一个承诺没有pipe函数)。

所以,这一行

const readableStream = eventstore.getUnpublishedEventStream();

应为:

const readableStream = await eventstore.getUnpublishedEventStream();

除此之外,我没有仔细研究您的代码,但这就是为什么您会收到当前错误消息的原因。

PS:请注意,我是wolkenkit的核心开发人员之一,因此请一言以蔽之。