首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >XHR OnLoad承诺阻止其他OnLoad回调

XHR OnLoad承诺阻止其他OnLoad回调
EN

Stack Overflow用户
提问于 2015-06-02 10:16:20
回答 1查看 792关注 0票数 0

我正在尝试从服务器下载文件,然后在加载的数据上运行承诺。我的问题是,我的承诺似乎是出于某种原因阻碍了一切:

它开始下载所有文件,一旦第一个文件被下载,它会阻止其他人下载并运行其"onLoad“回调完整承诺链,然后继续下载其余的文件。一旦一个新文件完成,它会阻止其他下载并运行承诺链等等。

我的onload回调包含以下内容:

代码语言:javascript
复制
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!';
      });
}

我的睡眠功能如下:

代码语言:javascript
复制
 function sleep(milliseconds) {
   var start = new Date().getTime();
   for (var i = 0; i < 1e7; i++) {
     if ((new Date().getTime() - start) > milliseconds){
       break;
    }
  }
 }

在控制台中,它返回:

代码语言:javascript
复制
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/)

最好的,尼古拉斯

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-02 17:00:57

我想您在这里问的问题是,为什么所有.then()函数都优先于JS事件循环中的onload事件?

它们是这样做的,这是因为承诺运行在一个与主任务队列分离的微任务队列上,并在后者之前耗尽。

另见this answer to another question

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30593279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档