diff --git a/frontend/src/js/component/wb-collection-content.js b/frontend/src/js/component/wb-collection-content.js
index cc14d5c..b71cbb1 100644
--- a/frontend/src/js/component/wb-collection-content.js
+++ b/frontend/src/js/component/wb-collection-content.js
@@ -67,7 +67,7 @@ class WBCollectionContent extends Component {
null,
(
)
] : [
- ({ item[1] }),
+ item[1],
'File',
filesize(item[2]),
(
diff --git a/frontend/src/js/misc/wb-download-file.js b/frontend/src/js/misc/wb-download-file.js
index d479f81..6010736 100644
--- a/frontend/src/js/misc/wb-download-file.js
+++ b/frontend/src/js/misc/wb-download-file.js
@@ -6,7 +6,6 @@ function wbDownloadFile(arvHost, arvToken,
const file = manifestReader.getFile(path);
const name = path.split('/').reverse()[0];
const blockRefs = file[0];
- let proxy;
let prom = makeArvadosRequest(arvHost, arvToken,
'/arvados/v1/keep_services');
@@ -14,26 +13,34 @@ function wbDownloadFile(arvHost, arvToken,
const services = xhr.response['items'];
const proxies = services.filter(svc => (svc.service_type === 'proxy'));
const n = Math.floor(Math.random() * proxies.length);
- proxy = proxies[n];
- });
+ const proxy = proxies[n];
+ const blocks = [];
+
+ let prom_2 = new Promise(accept => accept());
+
+ for (let i = 0; i < blockRefs.length; i++) {
+ const [ locator, position, size ] = blockRefs[i];
+
+ const prom_1 = makeArvadosRequest(
+ proxy.service_host + ':' + proxy.service_port,
+ arvToken,
+ '/' + locator,
+ { 'useSsl': proxy.service_ssl_flag,
+ 'responseType': 'arraybuffer' }
+ );
- const blocks = [];
- for (let i = 0; i < blockRefs.length; i++) {
- const [ locator, position, size ] = blockRefs[i];
+ prom_2 = prom_2.then(() => prom_1);
- prom = prom.then(() => makeArvadosRequest(
- proxy.service_host + ':' + proxy.service_port,
- arvToken,
- '/' + locator,
- { 'useSsl': proxy.service_ssl_flag,
- 'responseType': 'arraybuffer' }
- ));
+ prom_2 = prom_2.then(xhr => (blocks.push(xhr.response.slice(position,
+ position + size))));
+ }
+
+ prom_2 = prom_2.then(() => blocks);
+
+ return prom_2;
+ });
- prom = prom.then(xhr => (blocks.push(xhr.response.slice(position,
- position + size))));
- }
- prom = prom.then(() => blocks);
/* prom = prom.then(() => {
const blob = new Blob(blocks);