我正在编写一个KOA中间件来从mongo中提取用户信息,如果它没有被缓存的话。我收到以下错误:
" this.getUser"函数返回一个ES6承诺,如果没有使用请求缓存,则从mongo获取用户或创建一个新的匿名用户。
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中间件生成器中使用promises?我正在使用KOA v1.2.0。
答案 0 :(得分:2)
只是在@ Bergi的回答中添加更多内容。
KoaJS中使用的生成器函数不是纯JS生成器。 Koa使用下面的co
包裹生成器,它使用生成器(https://github.com/tj/co)模拟async/await
语义。
co
- 包装的生成器只能生成特定类型的Yieldables
(包括Promise);并在后台异步处理它们并将结果值(或错误)返回给生成器函数。
答案 1 :(得分:1)
你没有yield
内部承诺回调(不是生成器函数)。相反,你应该只是yield
承诺本身!
module.exports = function* securityMiddleware(next) {
var user = yield this.getUser(this.request);
if (user.isAnonymous) {
// throw 401 access error
} else {
yield next;
}
};