我正在尝试从我的服务器下载文件,然后在加载的数据上运行 Promises。我的问题是,我的 Promise 似乎出于某种原因阻止了一切:
它开始下载所有文件,一旦下载第一个文件,它会阻止其他文件下载并运行其“onLoad”回调完整承诺链,然后继续下载剩余的文件。新文件完成后,它会阻止其他下载并运行承诺链等。
我的 onload 回调包含以下内容:
function(response) {
window.console.log('on load callback...');
var sequence = Promise.resolve();
sequence
.then(function(){
sleep(10000);
window.console.log('sleep 1 is over...');
return 'DONE!';
})
.then(function(){
sleep(10000);
window.console.log('sleep 2 is over...');
return 'DONE!';
})
.then(function(){
sleep(10000);
window.console.log('sleep 3 is over...');
return 'DONE!';
});
}
我的睡眠功能如下:
function sleep(milliseconds) {
var start = new Date().getTime();
for (var i = 0; i < 1e7; i++) {
if ((new Date().getTime() - start) > milliseconds){
break;
}
}
}
在控制台中它返回:
on load callback...
sleep 1 is over...
sleep 2 is over...
sleep 3 is over...
on load callback...
sleep 1 is over...
sleep 2 is over...
sleep 3 is over...
on load callback...
sleep 1 is over...
sleep 2 is over...
sleep 3 is over...
on load callback...
sleep 1 is over...
sleep 2 is over...
sleep 3 is over...
任何帮助,将不胜感激。
我可以理解当“睡眠”运行时下载被阻止,但我不明白为什么它会在继续下载剩余文件之前运行所有“睡眠 1”、“睡眠 2”和“睡眠 3”。
==== 编辑 ====
我使用“promisified” XMLHttpRequest 和 Promise.all() 加载文件。( http://www.html5rocks.com/en/tutorials/es6/promises/ )
最好的,尼古拉斯