Koa.js在竞争条件下屈服

时间:2016-01-04 10:54:25

标签: javascript node.js koa co

我有一个使用koa.js的应用,对于上下文,我正在连接一个不严格遵循请求/响应模式的外部系统。 IE浏览器。在"请求"之后,它可能会也可能不会回答。

我能够将我的请求与这些回复相匹配,但后来我无法将其放入koa.js回复中:

r.get('/...', *function() {

    // (1) cannot yield since it will block and never call (2) ?
    callbacks.storeCb(howToMatchAnEventualResponse, function(err, resp) {  // may never get called depending about how the external system answers
        console.log("I should answer the http req now"); // how to answer the request from here ?
    });

    // has to be done after storingCb, this may or may not trigger the callback above
    externalSystem.sendMessage(msg); // (2)

    // something similar will have to be done in the callback instead
    this.body = {
        success : true,
        response : ''
    };

});

所以我的问题是,如何在回调中使用koa(或类似的东西)回答http请求,以及如何在未调用回调时(即延迟之后)发送空答案?< / p>

我猜我正在寻找与Promise.race()类似的内容,但对于koa,请使用yield

1 个答案:

答案 0 :(得分:0)

最后我能够使用bluebird's Promise.race()

我仍然对使用发电机的解决方案感兴趣。