diff --git a/src/server/create-renderer.js b/src/server/create-renderer.js index 8be2c449681..9727448d700 100644 --- a/src/server/create-renderer.js +++ b/src/server/create-renderer.js @@ -78,11 +78,11 @@ export function createRenderer ({ return false }, cb) try { - render(component, write, context, () => { + render(component, write, context, (err) => { if (template) { result = templateRenderer.renderSync(result, context) } - cb(null, result) + cb(err, result) }) } catch (e) { cb(e) diff --git a/src/server/render-context.js b/src/server/render-context.js index d75fdc8cf76..3ea98c67a82 100644 --- a/src/server/render-context.js +++ b/src/server/render-context.js @@ -25,8 +25,8 @@ export class RenderContext { renderStates: Array; write: (text: string, next: Function) => void; renderNode: (node: VNode, isRoot: boolean, context: RenderContext) => void; - next: () => void; - done: () => void; + next: (err: ?Error) => void; + done: (err: ?Error) => void; modules: Array<(node: VNode) => ?string>; directives: Object; @@ -60,10 +60,10 @@ export class RenderContext { this.next = this.next.bind(this) } - next () { + next (err: ?Error = null) { const lastState = this.renderStates[this.renderStates.length - 1] if (isUndef(lastState)) { - return this.done() + return this.done(err) } switch (lastState.type) { case 'Element': diff --git a/src/server/render.js b/src/server/render.js index 0400aa7f3b5..e1bfb3fb61f 100644 --- a/src/server/render.js +++ b/src/server/render.js @@ -200,7 +200,7 @@ function renderAsyncComponent (node, isRoot, context) { const reject = err => { console.error(`[vue-server-renderer] error when rendering async component:\n`) if (err) console.error(err.stack) - context.write(``, context.next) + context.write(``, context.next.bind(context, err)) } if (factory.resolved) {