我正在使用Windows 8 JavaScript应用程序,并且WinJS.Promise无法按照我的预期运行。这是我的异步方法......
function MyFiveSecondFunctionAsync() {
return new WinJS.Promise(function (c, e, p) {
var start = new Date().getTime();
var delay = 5000;
while (new Date().getTime() < start + delay) p();
c();
});
}
这就是我所说的......
document.querySelector("#status").innerText = "working";
MyFiveSecondFunctionAsync().done(function () {
document.querySelector("#status").innerText = "done";
});
document.querySelector("#status").innerText = "free";
点击按钮即可。我希望我的状态div在我点击按钮后非常简短地说“工作”,然后说“免费”5秒钟,最后在5秒延迟完成时说“完成”。相反,UI线程阻塞了5秒钟,然后状态div显示为“free”。
我认为执行将返回到将状态设置为“free”的行,但调试显示它在此之前命中了promise函数。因此,状态在5秒后设置为“完成”,然后设置为“空闲”。换句话说,我的异步函数只是不是异步操作。
答案 0 :(得分:3)
正如Raymond在评论中提到的那样,我认为承诺会创建一个新的线程,但事实并非如此。承诺仅提供了一种方便的方法来“在完成其他事情时做某事”,作为指定回调函数的替代方法,并可能进入嵌套回调的圣诞树问题。