你如何 运行 在 promise 或 callback 中`yield next`?

How do you run `yield next` inside a promise or callback?

我一直在为 koa 应用程序编写身份验证路由器。

我有一个从数据库获取数据然后将其与请求进行比较的模块。我只想 运行 yield next 如果身份验证通过。

问题是与数据库通信的模块 returns 一个承诺,如果我尝试 运行 yield next 在那个承诺中,我会得到一个错误。 SyntaxError: Unexpected strict mode reserved wordSyntaxError: Unexpected identifier 取决于是否使用严格模式。

这是一个简化的例子:

var authenticate = require('authenticate-signature');

// authRouter is an instance of koa-router
authRouter.get('*', function *(next) {
  var auth = authenticate(this.req);

  auth.then(function() {
    yield next;
  }, function() {
    throw new Error('Authentication failed');
  })
});

我想我明白了。

需要产生承诺,这将暂停函数,直到承诺得到解决,然后继续。

var authenticate = require('authenticate-signature');

// authRouter is an instance of koa-router
authRouter.get('*', function *(next) {
  var authPassed = false;

  yield authenticate(this.req).then(function() {
    authPassed = true;
  }, function() {
    throw new Error('Authentication failed');
  })

  if (authPassed)  {
   yield next;
  }
});

这似乎可行,但如果我 运行 遇到更多问题,我会更新它。