WinJS.Promise不能像我期望的那样工作

时间:2012-06-27 01:26:05

标签: javascript windows-8 commonjs

我正在使用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秒后设置为“完成”,然后设置为“空闲”。换句话说,我的异步函数只是不是异步操作。

1 个答案:

答案 0 :(得分:3)

正如Raymond在评论中提到的那样,我认为承诺会创建一个新的线程,但事实并非如此。承诺仅提供了一种方便的方法来“在完成其他事情时做某事”,作为指定回调函数的替代方法,并可能进入嵌套回调的圣诞树问题。