Skip to content

Commit a03882a

Browse files
committed
routes/crate: Avoid awaiting versions unless they are required
1 parent ddfede2 commit a03882a

File tree

3 files changed

+17
-13
lines changed

3 files changed

+17
-13
lines changed

app/controllers/crate/version.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ export default class CrateVersionController extends Controller {
2424
this.stackedGraph = false;
2525
}
2626

27-
@alias('loadDownloadsTask.last.value') downloads;
2827
@alias('model.crate') crate;
2928
@alias('model.requestedVersion') requestedVersion;
3029
@alias('model.version') currentVersion;
@@ -64,6 +63,17 @@ export default class CrateVersionController extends Controller {
6463
return readme;
6564
});
6665

66+
/** @return {import("../../models/version-download").default | null} */
67+
get downloads() {
68+
let crate = this.crate;
69+
let downloads = this.loadDownloadsTask.last?.value;
70+
if (!downloads || !crate.versionsObj) {
71+
return null;
72+
}
73+
let allLoaded = downloads.every(d => !!crate.versionsObj[d.belongsTo('version').id()]);
74+
if (allLoaded) return downloads;
75+
}
76+
6777
// This task would be `perform()` in setupController
6878
loadDownloadsTask = task(async () => {
6979
let downloads = await this.downloadsContext.version_downloads;

app/routes/crate/version-dependencies.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,12 @@ export default class VersionRoute extends Route {
3434
return version;
3535
}
3636

37-
async afterModel(_resolvedModel, transition) {
37+
afterModel(_resolvedModel, transition) {
3838
let crate = this.modelFor('crate');
39-
// TODO: Resolved version without waiting for versions to be resolved
40-
try {
41-
await crate.loadVersionsTask.perform();
42-
} catch (error) {
39+
crate.loadVersionsTask.perform().catch(error => {
4340
let title = `${crate.name}: Failed to load version data`;
4441
return this.router.replaceWith('catch-all', { transition, error, title, tryAgain: true });
45-
}
42+
});
4643
}
4744

4845
setupController(controller, model) {

app/routes/crate/version.js

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,10 @@ export default class VersionRoute extends Route {
1515
async model(params, transition) {
1616
let crate = this.modelFor('crate');
1717

18-
// TODO: Resolved version without waiting for versions to be resolved
19-
let versions;
20-
try {
21-
versions = await crate.loadVersionsTask.perform();
22-
} catch (error) {
18+
let versions = crate.loadVersionsTask.perform().catch(error => {
2319
let title = `${crate.name}: Failed to load version data`;
2420
return this.router.replaceWith('catch-all', { transition, error, title, tryAgain: true });
25-
}
21+
});
2622

2723
let version;
2824
let requestedVersion = params.version_num;
@@ -56,6 +52,7 @@ export default class VersionRoute extends Route {
5652
}));
5753

5854
if (!version) {
55+
versions = await versions;
5956
let versionNums = versions.map(it => it.num);
6057
semverSort(versionNums, { loose: true });
6158

0 commit comments

Comments
 (0)