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 ( chrome://flags/#enable-javascript-harmony
) 中启用 JavaScript Harmony。