如何在koa的另一个请求中等待请求和响应

时间:2015-09-10 04:17:30

标签: node.js koa

我想在请求中等待响应,直到我在另一个请求中设置值。如何在koa中编码?

  

请求1:/ always-get?key = abc
  请求2:/ set?key = abc& val = 1234

if($totalRows > 0 && ...

这在回调地狱框架中很容易......

1 个答案:

答案 0 :(得分:1)

您可以创建一个事件总线来共享它们之间的事件。此外,co将屈服于thunk并提供回调。因此,当你“听到”发出相同名称的事件时,你可以yield一个thunk并调用回调。一旦调用了该回调,中间件链就会继续。

var Emitter = require('events');
var bus = new Emitter();

router.get('/info/:key', function* (next) {
  var ctx = this;
  // yield a thunk
  yield function(cb) {
    // this has the potential to leak event listeners!
    bus.once(ctx.params.key, function(value) {
      ctx.body = value;
      cb();
    });
  };
});

router.get('/set/:key/:value', function* (next) {
  bus.emit(this.params.key, this.params.value);
  this.body = 'OK';
});