Javascript 我如何等待承诺完成,然后返回生成器函数?
我知道这是错误的,但本质上我想Javascript 我如何等待承诺完成,然后返回生成器函数?,javascript,node.js,generator,koa,Javascript,Node.js,Generator,Koa,我知道这是错误的,但本质上我想 通过promise连接到db/orm 等待承诺兑现并获得模型(承诺的回报) 使用form a middleware generator函数的结果在请求中放置模型 我怀疑这不是最好的方法,因此我有两个问题: 我应该重写DB/ORM连接到生成器函数(我有一种感觉,和膝关节炎的样式更内联) 回到最初的问题(因为我确信我不会有机会重写我所有的业务逻辑)-我如何等待承诺兑现,然后返回生成器函数 这是我拙劣的尝试——它不起作用,老实说,我没想到它会起作用,但我想从编写
- 通过promise连接到db/orm
- 等待承诺兑现并获得模型(承诺的回报)
- 使用form a middleware generator函数的结果在请求中放置模型
- 回到最初的问题(因为我确信我不会有机会重写我所有的业务逻辑)-我如何等待承诺兑现,然后返回生成器函数
var connectImpl = function() {
var qPromise = q.nbind(object.method, object);
return qPromise ;
}
var domainMiddlewareImpl = function() {
let connectPromise = connectImpl()
return connectPromise.then(function(models){
return function *(next){
this.request.models = models ;
}
})
}
var app = koa()
app.use(domainMiddlewareImpl())
根据,您可以执行以下操作:
var domainMiddlewareImpl = function() {
return function *(){
this.request.models = yield connectImpl();
};
};
基于Hugo(thx)提供的信息的上下文相关答案:
我的示例connectImpl是在ORM中设置域模型(现在是水线),连接到数据库(池),并返回ORM模型和DB连接的承诺。我只希望这一次发生,然后通过我的膝关节炎中间件,对每个请求,将对象添加到请求中。什么是JavaScript中的意思?这意味着函数是一个生成器。生成器是ECMAScript 6规范附带的一项新功能。它已经在一些浏览器和Node.js中可用。
var connectImpl = function() {
var qPromise = q.nbind(object.method, object);
return qPromise ;
}
var domainMiddlewareImpl = function () {
let models = null ;
return function *(next) {
if(models == null){
//////////////////////////////////////////////////////
// we only want one "connection", if that sets up a
// pool so be it
//////////////////////////////////////////////////////
models = yield connectImpl() ;
}
this.request.models = models.collections;
this.request.connections = models.connections;
yield next
};
};