+import { isPromise } from '../../shared/src'
import {
getCurrentInstance,
SetupContext,
* Runtime helper for storing and resuming current instance context in
* async setup().
*/
-export async function withAsyncContext<T>(
- awaitable: T | Promise<T>
-): Promise<T> {
+export function withAsyncContext<T>(awaitable: T | Promise<T>): Promise<T> {
const ctx = getCurrentInstance()
setCurrentInstance(null) // unset after storing instance
if (__DEV__ && !ctx) {
warn(`withAsyncContext() called when there is no active context instance.`)
}
- let res: T
- try {
- res = await awaitable
- } finally {
- setCurrentInstance(ctx)
- }
- return res
+ return isPromise<T>(awaitable)
+ ? awaitable.then(
+ res => {
+ setCurrentInstance(ctx)
+ return res
+ },
+ err => {
+ setCurrentInstance(ctx)
+ throw err
+ }
+ )
+ : (awaitable as any)
}