как использовать co.wrap с генератором - PullRequest
0 голосов
/ 17 мая 2018
const co = require('co');

const func1 = function(){
  setTimeout(()=>{
    console.log('func1');
  },2000);
}

const func2 = function(){
  setTimeout(()=>{
    console.log('func2');
  },2000);
}

const func3 = function(){
    console.log('func3');
}

const gen = co.wrap(function*(){
  yield func1;
  yield func2;
  return yield func3;
});


gen()
.then(function(){console.log('end')});

Ожидаемый результат func1 func2 FUNC3 конец

но это не показывает, что я хотел.

Это показывает func1

Как исправить код для вывода ожидаемого результата

1 Ответ

0 голосов
/ 17 мая 2018

Два вопроса:

  1. Ваши функции не могут вернуть управление.Если вы хотите использовать thunks (что советует документация против), вам нужно принять и вызвать обратный вызов:

    const func1 = function(cb){
      setTimeout(()=>{
        console.log('func1');
    
        return cb();
      },2000);
    };
    

    Однако лучше использовать обещания:

    const func2 = function(){
      return new Promise((resolve) => {
        setTimeout(()=>{
          console.log('func2');
    
          return resolve();
        },2000);
      });
    };
    
  2. Если вы используете обещания, вам нужно вызвать функцию, когда вы ее получите:

    yield func2();
    

    Вы можете только yield функцию, не вызывая ее, если онагром.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...