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

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

我有一个模块,可以从数据库获取数据,然后将其与请求进行比较.如果认证通过,我只想接下来运行yield.

问题在于,与数据库通信的模块返回了一个Promise,如果我尝试在该Promise中运行下一个yield,则会收到错误消息.根据是否使用严格模式,SyntaxError:意外的严格模式保留字或SyntaxError:意外的标识符.

这是一个简化的示例:

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');
  })
});

解决方法:

我想我知道了.

需要产生promise,这将暂停功能,直到promise被解决,然后继续.

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;
  }
});

这似乎可行,但是如果遇到其他问题,我将对其进行更新.

上一篇:关于koa-bodyparser获取post请求体JSON或x-www-form-urlencoded参数为undefined的问题


下一篇:Vue3+ElementPlus+Koa2 全栈开发后台系统