1

我是 Koa 的新手,但设置了一个使用 Kafka 的应用程序。我正在使用 kafkaesque(https://github.com/pelger/Kafkaesque)。我试过了yield* kafkaesque.tearUp()。结果:

cb(err);

^
TypeError: undefined is not a function

我也尝试过kafkaesque.tearUp(function *() {...}),但这也不起作用——只有 function () 样式的回调起作用。是否可以以 Koa 的方式处理这些类型的示例?如果需要,我可以处理回调,但现在不能使用代码,因为我需要yield next在连接 Kafka (kafkaesque.tearUp) 并设置主题 (kafkaesque.poll) 后调用。

4

1 回答 1

2

我终于能够通过使用“thunking”来让 kafkaesque 工作:

function tearUpThunk(kafka) {
    return function(callback) {
        kafka.tearUp(callback);
    }
}

function pollThunk(kafka, options) {
    return function(callback) {
        kafka.tearUp(options, callback);
    }
}

yield tearUpThunk(kafka) //Previously kafka.tearUp(function() {
yield pollThunk(kafka, options); //      kafka.poll(options, function() { etc.

我只需要确保每个函数都以这种方式返回一个回调。感谢http://strongloop.com/strongblog/node-js-express-introduction-koa-js-zone/解释了这个和其他 Koa 模式!

节点库 thunkify 也可以使这更容易(https://github.com/visionmedia/node-thunkify)。

于 2014-07-16T00:50:33.783 回答