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