从生成器函数返回promise

Return a promise from a generator function?

本文关键字:返回 promise 函数      更新时间:2023-09-26

我目前有一个promiseized函数(它向调用它的另一个函数返回promise),它的逻辑如下:

function( param1,param2 ){
    if( condition1 ){
        return function1();
    }
    if( condition2 ){
        return function2().then(
            () => {
                // blah blah
                return promsie;
            }
        )
    }
}  

CCD_ 1和CCD_。然而,有时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();
}

co返回promise联合文档

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