From feea7f9b489eea0f4e5e5ff4fbb7c46c3645787d Mon Sep 17 00:00:00 2001 From: "cinwell.li" Date: Fri, 29 Jun 2018 21:27:07 +0800 Subject: [PATCH] fix: loading embed files synchronously, fixed #525, fixed #527 (#544) * fix: loading embed files synchronously, fixed #525, fixed #527 * fix --- src/core/render/embed.js | 56 +++++++++++++++++++++++----------------- 1 file changed, 32 insertions(+), 24 deletions(-) diff --git a/src/core/render/embed.js b/src/core/render/embed.js index 810b1b6f9..f82a77d57 100644 --- a/src/core/render/embed.js +++ b/src/core/render/embed.js @@ -3,36 +3,44 @@ import {merge} from '../util/core' const cached = {} -function walkFetchEmbed({step = 0, embedTokens, compile, fetch}, cb) { - const token = embedTokens[step] +function walkFetchEmbed({embedTokens, compile, fetch}, cb) { + let token + let step = 0 + let count = 1 - if (!token) { + if (!embedTokens.length) { return cb({}) } - const next = text => { - let embedToken - if (text) { - if (token.embed.type === 'markdown') { - embedToken = compile.lexer(text) - } else if (token.embed.type === 'code') { - embedToken = compile.lexer( - '```' + - token.embed.lang + - '\n' + - text.replace(/`/g, '@DOCSIFY_QM@') + - '\n```\n' - ) + while ((token = embedTokens[step++])) { + const next = (function (token) { + return text => { + let embedToken + if (text) { + if (token.embed.type === 'markdown') { + embedToken = compile.lexer(text) + } else if (token.embed.type === 'code') { + embedToken = compile.lexer( + '```' + + token.embed.lang + + '\n' + + text.replace(/`/g, '@DOCSIFY_QM@') + + '\n```\n' + ) + } + } + cb({token, embedToken}) + if (++count >= step) { + cb({}) + } } - } - cb({token, embedToken}) - walkFetchEmbed({step: ++step, compile, embedTokens, fetch}, cb) - } + })(token) - if (process.env.SSR) { - fetch(token.embed.url).then(next) - } else { - get(token.embed.url).then(next) + if (process.env.SSR) { + fetch(token.embed.url).then(next) + } else { + get(token.embed.url).then(next) + } } }