1

Javascript ジェネレーターは実際のコルーチンではないため、あまり役に立ちません。したがって、ecmascript 6 の新しいキーワード「yield」を使用して、ブラウザーでコルーチンを実行したいと考えています。つまり、コールスタック内の複数のフレームにわたって譲歩できることを願っています。

私の知る限り、Firefox で Javascript 1.7+に基づくコルーチン ライブラリを見つけました。

「yield」は、Chrome ブラウザで長い間サポートされてきました。Javascriptジェネレーターを使用してChromeブラウザーをサポートするコルーチン実装があるのだろうか。

ありがとうございました!

4

1 に答える 1

1

Q ライブラリは、JavaScript ジェネレーター関数をラップasyncする方法を提供します。ジェネレーター関数内では、キーワードを使用して任意の Q promise オブジェクトを非同期的に待機できます。次に例を示します。yield

function delay(ms) {
    var deferred = Q.defer();
    setTimeout(deferred.resolve, ms);
    return deferred.promise;
}

function main()
{
    var callback = Q.async(function*(){
        var bodyStyle = document.body.style;

        yield delay(1000);
        bodyStyle.backgroundColor = "red";
        printOutput("step 1");

        yield delay(1000);
        bodyStyle.backgroundColor = "green";
        printOutput("step 2");

        yield delay(1000);
        bodyStyle.backgroundColor = "blue";
        printOutput("step 3");

        yield delay(1000);
        printOutput("step 4");
        bodyStyle.backgroundColor = "white";
    });

    Q.fcall(callback).then(function (){
        printOutput("Done!");
    });
}

ここに実用的なフィドルがあります。実行する前に、Chrome で JavaScript Harmony を有効にしてください ( chrome://flags/#enable-javascript-harmony)。

于 2014-02-04T04:58:17.870 に答える