从生成器函数返回一个promise?

时间:2016-07-19 17:57:43

标签: javascript node.js promise generator

我目前有一个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();
}

1 个答案:

答案 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
  });