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

そうしないと、チェーンが停止します、gah

于 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();

いくつかの脚注:

  • 関数を生成する場合、それはサンクであると想定されます。つまり、1 つの引数を受け入れ、コールバックです。
  • このコールバックを呼び出す必要があります。これを非同期で行うこともお勧めします。

cbこれをコードに適用すると: - 関数を生成しますが、その引数を呼び出すことはありません。- と同じnext

于 2014-02-20T10:25:27.373 に答える