私は約束を果たしていて、ある種の進捗通知を作成しようとしています。jQuery延期約束の進捗通知
コードはすべての関数を正しい順序で実行していますが、進行状況の更新は実際に発生したときとは異なり、解決の直前に実行されます。
誰かが間違っていることを指摘できますか?ここ
function start(x) {
console.log("Start: " + x);
var promise = process(x);
console.log("promise returned");
promise.then(function(data) {
console.log("Completed: " + data);
}, function(data) {
console.log("Cancelled: " + data);
}, function(data) {
console.log("In Progress: " + data);
});
}
function process(x) {
var deferred = $.Deferred();
var promise = deferred.promise();
// process asynchronously
setTimeout(function() {
for (var i=0 ; i<x ; i++) {
sleep(1000);
deferred.notify(i);
}
if (x % 2 === 0) {
deferred.reject(x);
} else {
deferred.resolve(x);
}
}, 0);
return promise;
}
function sleep(sleepDuration) {
var now = new Date().getTime();
while(new Date().getTime() < now + sleepDuration){ /* do nothing */ }
}
start(3);
フィドル:while()
で実装 https://jsfiddle.net/n86mr9tL/
ニース1。すべて今クリアする。 –