我一直在玩承诺,并试图建立某种进度通知。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);
小提琴这里: https://jsfiddle.net/n86mr9tL/
尼斯之一。现在都清楚了。 –