从KOA中间件内的承诺中调用yield

我正在编写一个KOA中间件,以便从mongo中提取用户信息,如果它没有被caching的话。 我收到以下错误:

“this.getUser”函​​数返回一个ES6承诺,如果没有使用请求caching,则从mongo获取用户,或创build一个新的匿名用户。

module.exports = function* securityMiddleware(next) { this.getUser(this.request) .then((user)=>{ if(user.isAonymous){ //throw 401 access error }else{ yield next; } }); }; 

这是无效的,因为:jshint说生成器必须有一个yield并抛出一个SyntaxError:意外的严格模式保留字。

你如何在KOA中间件生成器中使用promise? 我正在使用KOA v1.2.0。

只是在@ Bergi的答案上增加一点点。

KoaJS中使用的生成器函数不是纯JS生成器。 Koa使用下面的co来包装发生器,它使用生成器( https://github.com/tj/co )模拟async/await语义。

一个co包装的发电机只能产生特定types的可发Yieldables (包括Promise); 并在后台asynchronous处理它们,并将生成的值(或错误)返回给生成器函数。

你不会承诺callback(这不是生成器函数)。 相反,你应该只是承诺自己的承诺!

 module.exports = function* securityMiddleware(next) { var user = yield this.getUser(this.request); if (user.isAnonymous) { // throw 401 access error } else { yield next; } };