Skip to content

Commit c9833cb

Browse files
committed
app: Handle errors for the load more task
1 parent af3d232 commit c9833cb

File tree

2 files changed

+29
-19
lines changed

2 files changed

+29
-19
lines changed

app/controllers/crate/versions.js

Lines changed: 29 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,17 @@ import Controller from '@ember/controller';
22
import { inject as service } from '@ember/service';
33
import { tracked } from '@glimmer/tracking';
44

5-
import { dropTask } from 'ember-concurrency';
5+
import { didCancel, dropTask } from 'ember-concurrency';
66
import { alias } from 'macro-decorators';
77

8+
import { AjaxError } from '../../utils/ajax';
9+
810
function defaultVersionsContext() {
911
return { data: [], next_page: undefined };
1012
}
1113

1214
export default class SearchController extends Controller {
15+
@service sentry;
1316
@service store;
1417

1518
queryParams = ['per_page', 'sort'];
@@ -60,24 +63,32 @@ export default class SearchController extends Controller {
6063
per_page,
6164
};
6265
}
63-
let versions = await this.store.query('version', query);
64-
let meta = versions.meta;
65-
66-
let ids = versions.map(it => it.id);
67-
if (sort === 'semver') {
68-
this.bySemver = {
69-
...versionsContext,
70-
data: data.concat(ids),
71-
next_page: meta.next_page,
72-
};
73-
} else {
74-
this.byDate = {
75-
...versionsContext,
76-
data: data.concat(ids),
77-
next_page: meta.next_page,
78-
};
66+
67+
try {
68+
let versions = await this.store.query('version', query);
69+
let meta = versions.meta;
70+
71+
let ids = versions.map(it => it.id);
72+
if (sort === 'semver') {
73+
this.bySemver = {
74+
...versionsContext,
75+
data: data.concat(ids),
76+
next_page: meta.next_page,
77+
};
78+
} else {
79+
this.byDate = {
80+
...versionsContext,
81+
data: data.concat(ids),
82+
next_page: meta.next_page,
83+
};
84+
}
85+
return versions;
86+
} catch (error) {
87+
// report unexpected errors to Sentry and ignore `ajax()` errors
88+
if (!didCancel(error) && !(error instanceof AjaxError)) {
89+
this.sentry.captureException(error);
90+
}
7991
}
80-
return versions;
8192
});
8293

8394
reset() {

app/routes/crate/versions.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ export default class VersionsRoute extends Route {
2222
controller.set('crate', crate);
2323
// Fetch initial data only if empty
2424
if (controller.data.length === 0) {
25-
// TODO: Add error handling
2625
waitForPromise(controller.loadMoreTask.perform());
2726
}
2827
}

0 commit comments

Comments
 (0)