XHR进度事件微任务队列

时间:2015-06-05 11:43:14

标签: javascript xmlhttprequest promise ecmascript-6 fetch-api

我想在承诺中使用XHR。 我按照HTML5 rock(1)和Mozilla的网站(2)的建议创建了XHR Promise。

它没有按预期工作。如果我有以下序列来加载和处理文件:

sequence = xhrPromise('filename').
  .then(parseFile)
  .then(processFile)
  .then(allSet);

如果我只运行1个序列,它会按预期工作。

如果我尝试使用Promise.all()运行N个序列来下载/处理N个文件,它会中断。

所有下载都以" parallel"开始,然后一旦第一个XHR请求完成,它就会停止下载其他文件,运行该文件的完整序列,然后继续下载剩余文件。然后,一旦完成另一个文件,它将阻止下载,运行此文件的序列,然后恢复下载等。

似乎是预期的行为,因为XHR进度事件被抛出主要任务队列,而承诺正在使用微任务队列。

有意义吗?

如果我使用" fetch"它似乎按预期工作API代替XHR但无法监控下载进度对我来说是一个交易破坏者。

有解决此问题的好方法吗?

(1)http://www.html5rocks.com/en/tutorials/es6/promises/

(2)https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

1 个答案:

答案 0 :(得分:0)

  

停止下载其他文件

你是什么意思? IO发生在主线程之外,即使你执行javascript也会继续下载。虽然如果对结果进行一些繁重的处理,您可能希望查看webworkers以阻止主UI线程。