Fix fetchData
The fetchData function suffer from a race condition. If the function is called before the promise finishes, it will result in another pair of HTTP request. This does not only make the function useless but Actually, it makes it harmful as the data might be redownloaded twice. Now fetchData is not a function but rather the promise by itself. Previous callers are expected to await the variable instead, this should be not concern as awaiting a promise multiple time in JavaScript is completely safe.
This commit is contained in:
parent
6846d314d6
commit
a1c6b89740
2
.github/workflows/deploy.yaml
vendored
2
.github/workflows/deploy.yaml
vendored
@ -16,7 +16,7 @@ jobs:
|
||||
with:
|
||||
index: true
|
||||
input: content
|
||||
output: static
|
||||
output: assets/indices
|
||||
root: .
|
||||
|
||||
- name: Setup Hugo
|
||||
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -3,5 +3,5 @@ public
|
||||
resources
|
||||
.idea
|
||||
content/.obsidian
|
||||
static/linkIndex.json
|
||||
static/contentIndex.json
|
||||
assets/indices/linkIndex.json
|
||||
assets/indices/contentIndex.json
|
||||
|
@ -1,5 +1,5 @@
|
||||
async function drawGraph(url, baseUrl, pathColors, depth, enableDrag, enableLegend, enableZoom) {
|
||||
const { index, links, content } = await fetchData()
|
||||
const { index, links, content } = await fetchData
|
||||
const curPage = url.replace(baseUrl, "")
|
||||
|
||||
const parseIdsFromLinks = (links) => [...(new Set(links.flatMap(link => ([link.source, link.target]))))]
|
||||
|
@ -8,7 +8,7 @@ function htmlToElement(html) {
|
||||
function initPopover(base) {
|
||||
const baseUrl = base.replace(window.location.origin, "") // is this useless?
|
||||
document.addEventListener("DOMContentLoaded", () => {
|
||||
fetchData().then(({content}) => {
|
||||
fetchData.then(({content}) => {
|
||||
const links = [...document.getElementsByClassName("internal-link")]
|
||||
links.forEach(li => {
|
||||
const linkDest = content[li.dataset.src.replace(baseUrl, "")]
|
||||
|
@ -81,7 +81,7 @@ const removeMarkdown = (
|
||||
}
|
||||
})
|
||||
|
||||
const { content } = await fetchData()
|
||||
const { content } = await fetchData
|
||||
for (const [key, value] of Object.entries(content)) {
|
||||
contentIndex.add({
|
||||
id: key,
|
||||
|
@ -3,9 +3,9 @@
|
||||
{{$url := urls.Parse .Site.BaseURL }}
|
||||
{{$host := strings.TrimRight "/" $url.Path }}
|
||||
{{$curPage := strings.TrimPrefix $host (strings.TrimRight "/" .Page.RelPermalink) }}
|
||||
{{$linkIndex := getJSON "/static/linkIndex.json"}}
|
||||
{{$linkIndex := getJSON "/assets/indices/linkIndex.json"}}
|
||||
{{$inbound := index $linkIndex.index.backlinks $curPage}}
|
||||
{{$contentTable := getJSON "/static/contentIndex.json"}}
|
||||
{{$contentTable := getJSON "/assets/indices/contentIndex.json"}}
|
||||
{{if $inbound}}
|
||||
{{$cleanedInbound := apply (apply $inbound "index" "." "source") "replace" "." " " "-"}}
|
||||
{{- range $cleanedInbound | uniq -}}
|
||||
|
@ -21,35 +21,25 @@
|
||||
<script src="{{$darkMode.Permalink}}"></script>
|
||||
|
||||
<!-- Preload page vars -->
|
||||
{{$linkIndex := resources.Get "indices/linkIndex.json" | resources.Fingerprint "md5" | resources.Minify | }}
|
||||
{{$contentIndex := resources.Get "indices/contentIndex.json" | resources.Fingerprint "md5" | resources.Minify }}
|
||||
<script>
|
||||
const BASE_URL = {{.Site.BaseURL}}
|
||||
let saved = false
|
||||
const fetchData = async () => {
|
||||
if (saved) {
|
||||
return saved
|
||||
} else {
|
||||
const promises = [
|
||||
fetch("{{ .Site.BaseURL }}/linkIndex.json")
|
||||
const fetchData = Promise.all([
|
||||
fetch("{{ $linkIndex.Permalink }}")
|
||||
.then(data => data.json())
|
||||
.then(data => ({
|
||||
index: data.index,
|
||||
links: data.links,
|
||||
})),
|
||||
fetch("{{ .Site.BaseURL }}/contentIndex.json")
|
||||
fetch("{{ $contentIndex.Permalink }}")
|
||||
.then(data => data.json()),
|
||||
]
|
||||
const [{index, links}, content] = await Promise.all(promises)
|
||||
const res = ({
|
||||
])
|
||||
.then(([{index, links}, content]) => ({
|
||||
index,
|
||||
links,
|
||||
content,
|
||||
})
|
||||
saved = res
|
||||
return res
|
||||
}
|
||||
|
||||
}
|
||||
fetchData()
|
||||
}))
|
||||
</script>
|
||||
</head>
|
||||
{{ template "_internal/google_analytics.html" . }}
|
||||
|
Loading…
Reference in New Issue
Block a user