发电机基于JavaScript协同程序库支持Chrome浏览器(Generator based Ja

2019-10-19 07:41发布

JavaScript的发电机不能帮助太多,因为它不是一个真正的协同程序。 所以我希望用一些新的ECMAScript 6的关键字,“产量”,以在浏览器协同程序。 也就是说,我希望我可以在调用堆栈跨越多个帧的产生。

据我所知,我刚发现基于JavaScript 1.7+在Firefox协同程序库,可以在这里找到http://www.neilmix.com/2007/02/07/threading-in-javascript-17/ 。

“产量”已经在Chrome浏览器已经支持了很长的时间。 所以我想知道有一个协同程序实现配套使用JavaScript生成Chrome浏览器。

谢谢!

Answer 1:

Q库提供async方法来包裹一个JavaScript发电机功能 。 里面的发电机的功能,你可以异步等待与任何Q承诺目标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!");
    });
}

这里是工作提琴 。 之前运行它,确保启用JavaScript和谐在Chrome( chrome://flags/#enable-javascript-harmony )。



文章来源: Generator based Javascript coroutine library supporting Chrome browser