【问题标题】:Koa with Kafka - Cannot yield kafka.connect()Koa 与 Kafka - 无法产生 kafka.connect()
【发布时间】:2014-07-15 21:12:14
【问题描述】:

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

cb(err);

^
TypeError: undefined is not a function

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

【问题讨论】:

    标签: javascript node.js apache-kafka koa


    【解决方案1】:

    我终于能够通过使用“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)。

    【讨论】:

    • 谢谢。我有同样的问题。简单地使用该方法时,this 会丢失。在 LiveScript 中,我必须写 result = yield -> obj.method it 而不是 result = yield obj.method
    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-08-29
    • 1970-01-01
    • 2022-06-13
    • 2023-03-18
    • 2020-06-25
    • 2021-08-17
    相关资源
    最近更新 更多