当前位置:  开发笔记 > 编程语言 > 正文

如何在promise或callback中运行“ yield next”?

如何解决《如何在promise或callback中运行“yieldnext”?》经验,为你挑选了1个好方法。

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

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

问题在于,与数据库通信的模块返回了一个Promise,如果我尝试yield next在该Prom中运行,则会出现错误。无论是SyntaxError: Unexpected strict mode reserved word还是SyntaxError: 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');
  })
});

Hal Carleton.. 5

我想我知道了。

需要产生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;
  }
});

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



1> Hal Carleton..:

我想我知道了。

需要产生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;
  }
});

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

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有