我想在承诺中使用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
答案 0 :(得分:0)
停止下载其他文件
你是什么意思? IO发生在主线程之外,即使你执行javascript也会继续下载。虽然如果对结果进行一些繁重的处理,您可能希望查看webworkers以阻止主UI线程。