Vue promise wrapper component
The goal of this component is to simplify rendering logic based on promise state (pending / fulfilled, rejected). The component keeps track of the promise's state and proposes slots to render content accordingly.
You should avoid this component when:
npm install --save vue-prom
<script src="https://unpkg.com/vue-prom@latest"></script>
With vue-prom we would write the following:
<template> <div> <vue-prom :promise="api.getUser()"> <div slot="pending"> Loading user... </div> <div slot="then" slot-scope="{result}"> Hello {{ result.firstName }} {{ result.lastName }} </div> <div slot="catch" slot-scope="{error}"> {{ error.message }} </div> </vue-prom> </div> </template> <script> import VueProm from 'vue-prom'; import api from './api'; export default { data() { api }, components: { VueProm } }; </script>
Instead of:
<template> <div> <div v-if="loading"> Loading user... </div> <div v-else-if="error"> {{ error.message }} </div> <div v-else> Hello {{ result.firstName }} {{ result.lastName }} </div> </div> </template> <script> import api from './api'; export default { created() { this.loading = true; this.error = null; api .getUser() .then(result => (this.user = result)) .catch(error => (this.error = error)) .finally(_ => (this.loading = false)); }, data() { return { loading: false, user: null }; } }; </script>
Alternatively, to keep the template concise, we can omit the 'pending' and 'catch' slots altogether and rely on the default labels provided by the component instead.
<template> <div> <vue-prom :promise="api.getUser()"> <div slot="then" slot-scope="{result}"> Hello {{ result.firstName }} {{ result.lastName }} </div> </vue-prom> </div> </template>
The component watches both the promise and refresh props, the promise will automatically re-execute when the value of either of these changes.
All slots are optional.
Name Visible when Slot type(s) If absent pending The promise is pending Regular only A span with 'Loading...' catch The promise was rejected Regular and scoped A span with 'Error' then The promise was fulfilled Regular and scoped A span with 'Loaded'Data exposed by scoped slots:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4