Я играл с обещаниями и пытался создать какое-то уведомление о ходе.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);
Fiddle здесь: https://jsfiddle.net/n86mr9tL/
Nice один. Теперь все ясно. –