Javascript生成器帮不了什么忙,因为它不是真正的协同机制。因此,我希望在浏览器中使用一些新的ecmascript 6关键字“产”。也就是说,我希望我能够在调用堆栈中的多个帧中屈服。
据我所知,我刚刚在火狐上找到了一个基于Javascript 1.7+的协同库,可以在http://www.neilmix.com/2007/02/07/threading-in-javascript-17/上找到。
Chrome浏览器长期以来一直支持“收益率”。所以我想知道是否有一个协同实现支持使用Javascript生成器的Chrome浏览器。
谢谢!
发布于 2014-02-04 04:58:17
Q库为封装JavaScript生成器函数提供了async
方法。在生成器函数中,您可以使用yield
关键字异步等待任何Q承诺对象,例如:
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
)中的和谐。
https://stackoverflow.com/questions/21542174
复制相似问题