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 秒後に「完了」に設定され、その後「無料」に設定されます。言い換えれば、私の非同期関数は単に非同期的に動作していません。