1

我正在使用 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”的行,但调试表明它在此之前达到了 promise 函数。因此状态在 5 秒后设置为“完成”,然后设置为“空闲”。换句话说,我的异步函数只是没有异步执行。

4

1 回答 1

3

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

于 2012-06-27T17:40:06.067 回答