Javascript 从生成器函数返回承诺?
我目前有一个promisified函数(它将一个承诺返回给另一个调用它的函数),它具有如下逻辑:Javascript 从生成器函数返回承诺?,javascript,node.js,promise,generator,Javascript,Node.js,Promise,Generator,我目前有一个promisified函数(它将一个承诺返回给另一个调用它的函数),它具有如下逻辑: function( param1,param2 ){ if( condition1 ){ return function1(); } if( condition2 ){ return function2().then( () => { // blah blah
function( param1,param2 ){
if( condition1 ){
return function1();
}
if( condition2 ){
return function2().then(
() => {
// blah blah
return promsie;
}
)
}
}
function1()
和function2()
都是推荐的函数。然而,有时然后链变得复杂。我想搬到发电厂去
这是在不破坏外部功能的情况下移植到发电机的正确方法吗?外部功能只是期望有一个承诺,但对它没有任何作用:
function(param1,param2){
co(function*(){
if( condition1 ){
let result = yield function1();
this.return( result );
}
if( condition2 ){
let result = yield function2();
this.return( result )
}
});
return Q();
}
co
返回承诺
因此,如果要修改函数,可以执行以下操作
function myFunc(param1,param2){
return co(function*(){
var myValue;
if( condition1 ){
myValue = yield function1();
}
else if( condition2 ){
myValue = yield function2();
}
return myValue;
});
}
这样你可以在其他地方使用它
myFunc(param1,param2)
.then(function(value) {
console.log(value); // will output myValue
});
因此,如果我理解正确,在移动到co
之后,我的第一个if条件可以保留为考虑承诺是可组合的,co
返回一个承诺。这是第二个需要更改的if
,因为它需要一些yield
ing。我将代码更新为else if
这是您想要的吗?在前面的代码示例中,即使condition1
为真,如果condition2
holdsno,原始值也会被覆盖,移动到if else
并不是我想知道的。我想知道合作和承诺是如何协同工作的。hr:)我不确定你在第二个问题中到底问了什么,我认为这是,如果相关的话。在任何情况下,我的示例显示,co
返回一个承诺,以及以后如何使用它的结果。什么是this.return()
?你从哪里得到的Q()
?@Bergi这里是Q
是npmQ
模块。排除了简洁性要求。但是…此
不是生成器,您不能从运行的生成器内部调用。return
只能从外部调用,您应该只使用return
语句吗?而且Q()
只是一个空洞的承诺,如果未定义,它会立即实现,而不是等待任何东西?
myFunc(param1,param2)
.then(function(value) {
console.log(value); // will output myValue
});