我目前有一个promisified函数(它返回一个调用它的另一个函数的承诺),它有一些逻辑如下:
function( param1,param2 ){
if( condition1 ){
return function1();
}
if( condition2 ){
return function2().then(
() => {
// blah blah
return promsie;
}
)
}
}
function1()
和function2()
都是宣传的功能。但是,有时then
链变得复杂。我很乐意转向发电机。
这是在没有破坏外部函数的情况下移植到生成器的正确方法吗?外部函数只是期望一个承诺但不对它做任何事情:
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();
}
答案 0 :(得分:2)
co
会返回一个承诺co documentation
co(function*(){
var myValue;
if( condition1 ){
myValue = yield function1();
}
else if( condition2 ){
myValue = yield function2();
}
return myValue;
})
.then(function(value){
console.log(value); // will output myValue
})
.catch(...);
因此,如果您想修改您的功能,您可以执行以下操作
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
});