Я играл с обещаниями и пытался создать какое-то уведомление о прогрессе.
Код выполняет все функции в правильном порядке, но обновления выполнения выполняются непосредственно перед разрешением, а не тогда, когда они действительно происходят.
Может ли кто-нибудь указать, что я делаю неправильно?
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);
Скрипка здесь: https://jsfiddle.net/n86mr9tL/