你如何 运行 在 promise 或 callback 中`yield next`?
How do you run `yield next` inside a promise or callback?
我一直在为 koa 应用程序编写身份验证路由器。
我有一个从数据库获取数据然后将其与请求进行比较的模块。我只想 运行 yield next
如果身份验证通过。
问题是与数据库通信的模块 returns 一个承诺,如果我尝试 运行 yield next
在那个承诺中,我会得到一个错误。 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');
})
});
我想我明白了。
需要产生承诺,这将暂停函数,直到承诺得到解决,然后继续。
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 应用程序编写身份验证路由器。
我有一个从数据库获取数据然后将其与请求进行比较的模块。我只想 运行 yield next
如果身份验证通过。
问题是与数据库通信的模块 returns 一个承诺,如果我尝试 运行 yield next
在那个承诺中,我会得到一个错误。 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');
})
});
我想我明白了。
需要产生承诺,这将暂停函数,直到承诺得到解决,然后继续。
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;
}
});
这似乎可行,但如果我 运行 遇到更多问题,我会更新它。