Skip to content

Commit

Permalink
Simplify resolveElements
Browse files Browse the repository at this point in the history
  • Loading branch information
taion committed Oct 27, 2016
1 parent 9a8d8fa commit 425818c
Showing 1 changed file with 16 additions and 15 deletions.
31 changes: 16 additions & 15 deletions src/resolveElements.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,32 +60,33 @@ function createElements(match, Components, matchData) {
export default async function* resolveElements(match) {
const { routes } = match;

// TODO: These should use routeMatch objects as above.
const Components = routes.map(route => (
route.getComponent ? route.getComponent(match) : route.Component
));
const data = routes.map(route => (
route.getData ? route.getData(match) : route.data
));

if (!Components.some(isPromise) && !data.some(isPromise)) {
yield createElements(match, Components, data);
return;
}
const earlyComponents = Components.some(isPromise) ?
await Promise.all(Components.map(checkResolved)) : Components;
const earlyData = data.some(isPromise) ?
await Promise.all(data.map(checkResolved)) : data;

const earlyComponents = await Promise.all(Components.map(checkResolved));
const earlyData = await Promise.all(data.map(checkResolved));
let resolvedComponents;
let resolvedData;

const earlyElements = createElements(match, earlyComponents, earlyData);
yield earlyElements.every(element => element !== undefined) ?
earlyElements : undefined;
if (!earlyComponents.every(isResolved) || !earlyData.every(isResolved)) {
const pendingElements = createElements(match, earlyComponents, earlyData);
yield pendingElements.every(element => element !== undefined) ?
pendingElements : undefined;

if (earlyComponents.every(isResolved) && earlyData.every(isResolved)) {
// We're done if all promises were resolved.
return;
resolvedComponents = await Promise.all(Components);
resolvedData = await Promise.all(data);
} else {
resolvedComponents = earlyComponents;
resolvedData = earlyData;
}

const resolvedComponents = await Promise.all(Components);
const resolvedData = await Promise.all(data);

yield createElements(match, resolvedComponents, resolvedData);
}

0 comments on commit 425818c

Please sign in to comment.