0

在更改它的上下文值时,我无法让 co 恢复:

var co = require( 'co' );

function *foo( next ){
    console.log( 'foo yielding' );
    yield next;
    console.log( 'foo yielded' );

    return 42;
}

var bar = co( function *(){
    console.log( 'bar yielding' );

    // this is the bit that I'm having problems with
    yield function( cb ){    
        return co( foo ).call(
              { name: 'this object' }
            , function(){ console.log( 'in next' ); }
            , cb
        );
    };

    console.log( 'bar yielded' );
} );

bar();

以上日志:

bar yielding
foo yielding
in next

我尝试将这co( foo ).call条线包装在一个函数、一个生成器函数和一堆其他东西中。我无法让它工作......帮助!

请注意,如果我co正常调用,它可以工作。但是我无法设置我试图调用的函数的上下文或传递参数:

yield co( foo );
4

2 回答 2

0

我的下一个函数需要一个回调,并且需要执行它:

, function( cb ){ console.log( 'in next' ); cb(); }

否则链条会停止,嘎

于 2014-02-20T10:11:10.793 回答
0

目前还不清楚你试图实现什么,但我假设你想看到

bar yielding
foo yielding
in next
foo yielding
bar yielding

试试这个代码:

var co = require( 'co' );

function *foo( next ){
    console.log( 'foo yielding' );
    yield next;
    console.log( 'foo yielded' );

    return 42;
}

var bar = co( function *(){
    console.log( 'bar yielding' );

    // this is the bit that I'm having problems with
    yield co( foo ).bind(
              { name: 'this object' }
            , function(cb){ console.log( 'in next, name: ' + this.name ); process.nextTick(cb) }
        );

    console.log( 'bar yielded' );
} );

bar();

几个脚注:

  • 如果你 yield 一个函数,它应该是一个 thunk,也就是说,它接受一个参数并且它是回调;
  • 您需要调用此回调,异步执行此操作也是一个好主意;

应用这个你的代码: - 你产生一个函数,但从不调用它的cb参数;- 与 相同next

于 2014-02-20T10:25:27.373 回答