基于发电机的JavaScript Coroutine库支持Chrome浏览器



JavaScript Generator无济于事,因为它不是真正的Coroutine。因此,我希望使用一些新的ecmascript 6关键字"产量"在浏览器中进行Coroutine。即,我希望我可以在Callstack中的多个帧屈服。

据我所知,我刚刚在Firefox上找到了一个基于JavaScript 1.7 的Coroutine库,可以在http://www.neilmix.com/2007/02/02/02/07/threading-indreading-indreading-indreadig-in-javascript-17/中找到。

"产量"在Chrome浏览器中已长期支持。因此,我想知道使用JavaScript Generator提供了一个支持Chrome浏览器的Coroutine实现。

谢谢!

q库提供async方法来包装JavaScript生成器函数。在发电机函数中,您可以异步等待使用yield关键字的任何Q Promise对象,例如:

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)。

相关内容

  • 没有找到相关文章

最新更新