mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-24 22:55:13 +00:00
fix: pass tests
This commit is contained in:
parent
561f34927e
commit
3366268fb7
@ -274,9 +274,17 @@ export function useAsyncData<
|
||||
(nuxtApp._asyncDataPromises[key] as any).cancelled = true
|
||||
}
|
||||
// Avoid fetching same key that is already fetched
|
||||
if (!opts.force && hasCachedData(opts._triggeredBy)) {
|
||||
if(opts._triggeredBy === 'initial' && !opts.force && nuxtApp.isHydrating && hasCachedData(opts._triggeredBy)) {
|
||||
return Promise.resolve(options.getCachedData!(key, opts._triggeredBy))
|
||||
}
|
||||
|
||||
// If cache changed based on the triggeredBy, set new data result
|
||||
if (!opts.force && hasCachedData(opts._triggeredBy)) {
|
||||
const result = options.getCachedData!(key, opts._triggeredBy)
|
||||
asyncData.data.value = result
|
||||
return Promise.resolve(result)
|
||||
}
|
||||
|
||||
asyncData.pending.value = true
|
||||
asyncData.status.value = 'pending'
|
||||
// TODO: Cancel previous promise
|
||||
@ -325,7 +333,7 @@ export function useAsyncData<
|
||||
return nuxtApp._asyncDataPromises[key]!
|
||||
}
|
||||
|
||||
const initialFetch = () => asyncData.refresh({ _triggeredBy: 'refresh:manual' })
|
||||
const initialFetch = () => asyncData.refresh({ _triggeredBy: 'initial' })
|
||||
|
||||
const fetchOnServer = options.server !== false && nuxtApp.payload.serverRendered
|
||||
|
||||
|
@ -1,13 +1,20 @@
|
||||
<script setup lang="ts">
|
||||
const { data, refresh } = await useAsyncData('key', () => Promise.resolve('something'), {
|
||||
getCachedData: (_, triggeredBy) => {
|
||||
if(triggeredBy === 'refresh:manual') {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
})
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<!-- Edit this file to play around with Nuxt but never commit changes! -->
|
||||
<div>
|
||||
Nuxt 3 Playground
|
||||
{{ data }}
|
||||
<button @click="refresh()" />
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
|
||||
</style>
|
||||
<style scoped></style>
|
||||
|
@ -239,19 +239,16 @@ describe('useAsyncData', () => {
|
||||
})
|
||||
|
||||
it('will use cache on refresh by default', async () => {
|
||||
let called = 0
|
||||
const fn = () => called++
|
||||
const { data, refresh } = await useAsyncData(() => 'other value', { getCachedData: () => fn() })
|
||||
expect(data.value).toBe(0)
|
||||
const { data, refresh } = await useAsyncData(() => 'other value', { getCachedData: () => 'cached' })
|
||||
expect(data.value).toBe('cached')
|
||||
await refresh()
|
||||
expect(data.value).toBe(0)
|
||||
expect(data.value).toBe('cached')
|
||||
})
|
||||
|
||||
it('will not use cache with force option', async () => {
|
||||
let called = 0
|
||||
const fn = () => called++
|
||||
const { data, refresh } = await useAsyncData(() => 'other value', { getCachedData: () => fn() })
|
||||
expect(data.value).toBe(0)
|
||||
await refresh({ force: true })
|
||||
expect(data.value).toBe('other value')
|
||||
})
|
||||
@ -262,16 +259,18 @@ describe('useAsyncData', () => {
|
||||
})
|
||||
|
||||
it('getCachedData should receive triggeredBy on manual refresh', async () => {
|
||||
const { data, refresh } = await useAsyncData(() => '', { getCachedData: (_, triggeredBy) => triggeredBy })
|
||||
const { data, refresh } = await useAsyncData(() => '', {
|
||||
getCachedData: (_, triggeredBy) => triggeredBy
|
||||
})
|
||||
await refresh()
|
||||
expect(data.value).toBe('refresh:manual')
|
||||
})
|
||||
|
||||
it('getCachedData should receive triggeredBy on watch', async () => {
|
||||
const number = ref(0)
|
||||
const { data } = await useAsyncData(() => '', { getCachedData: (_, triggeredBy) => triggeredBy })
|
||||
const { data } = await useAsyncData(() => '', { getCachedData: (_, triggeredBy) => triggeredBy, watch: [number] })
|
||||
number.value = 1
|
||||
// TODO: Maybe setTimeout or similar
|
||||
await new Promise(resolve => setTimeout(resolve, 1))
|
||||
expect(data.value).toBe('watch')
|
||||
})
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user