【发布时间】:2015-06-02 10:16:20
【问题描述】:
我正在尝试从我的服务器下载文件,然后在加载的数据上运行 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”剩余文件。
==== 编辑 ====
我使用“承诺”的 XMLHttpRequest 和 Promise.all() 加载文件。 (http://www.html5rocks.com/en/tutorials/es6/promises/)
最好, 尼古拉斯
【问题讨论】:
-
下载对应的代码在哪里?
-
我在 EDITS 中添加了信息。根本没有魔法,我使用了一个“承诺的”XMLHttpRequest,为每个文件构建我的序列数组,然后可以 Promise.all()。
标签: javascript asynchronous xmlhttprequest es6-promise