refactor(runtime-core): extract promise check into shared (#325)
This commit is contained in:
parent
bb9dca2047
commit
7305f693b1
@ -23,7 +23,8 @@ import {
|
|||||||
isArray,
|
isArray,
|
||||||
isObject,
|
isObject,
|
||||||
NO,
|
NO,
|
||||||
makeMap
|
makeMap,
|
||||||
|
isPromise
|
||||||
} from '@vue/shared'
|
} from '@vue/shared'
|
||||||
import { SuspenseBoundary } from './suspense'
|
import { SuspenseBoundary } from './suspense'
|
||||||
import {
|
import {
|
||||||
@ -281,11 +282,7 @@ export function setupStatefulComponent(
|
|||||||
currentInstance = null
|
currentInstance = null
|
||||||
currentSuspense = null
|
currentSuspense = null
|
||||||
|
|
||||||
if (
|
if (isPromise(setupResult)) {
|
||||||
setupResult &&
|
|
||||||
isFunction(setupResult.then) &&
|
|
||||||
isFunction(setupResult.catch)
|
|
||||||
) {
|
|
||||||
if (__FEATURE_SUSPENSE__) {
|
if (__FEATURE_SUSPENSE__) {
|
||||||
// async setup returned Promise.
|
// async setup returned Promise.
|
||||||
// bail here and wait for re-entry.
|
// bail here and wait for re-entry.
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { VNode } from './vnode'
|
import { VNode } from './vnode'
|
||||||
import { ComponentInternalInstance, LifecycleHooks } from './component'
|
import { ComponentInternalInstance, LifecycleHooks } from './component'
|
||||||
import { warn, pushWarningContext, popWarningContext } from './warning'
|
import { warn, pushWarningContext, popWarningContext } from './warning'
|
||||||
|
import { isPromise } from '@vue/shared'
|
||||||
|
|
||||||
// contexts where user provided function may be executed, in addition to
|
// contexts where user provided function may be executed, in addition to
|
||||||
// lifecycle hooks.
|
// lifecycle hooks.
|
||||||
@ -71,8 +72,8 @@ export function callWithAsyncErrorHandling(
|
|||||||
args?: any[]
|
args?: any[]
|
||||||
) {
|
) {
|
||||||
const res = callWithErrorHandling(fn, instance, type, args)
|
const res = callWithErrorHandling(fn, instance, type, args)
|
||||||
if (res != null && !res._isVue && typeof res.then === 'function') {
|
if (res != null && !res._isVue && isPromise(res)) {
|
||||||
res.catch((err: any) => {
|
res.catch((err: Error) => {
|
||||||
handleError(err, instance, type)
|
handleError(err, instance, type)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -41,6 +41,10 @@ export const isSymbol = (val: any): val is symbol => typeof val === 'symbol'
|
|||||||
export const isObject = (val: any): val is Record<any, any> =>
|
export const isObject = (val: any): val is Record<any, any> =>
|
||||||
val !== null && typeof val === 'object'
|
val !== null && typeof val === 'object'
|
||||||
|
|
||||||
|
export function isPromise<T = any>(val: any): val is Promise<T> {
|
||||||
|
return isObject(val) && isFunction(val.then) && isFunction(val.catch)
|
||||||
|
}
|
||||||
|
|
||||||
export const objectToString = Object.prototype.toString
|
export const objectToString = Object.prototype.toString
|
||||||
export const toTypeString = (value: unknown): string =>
|
export const toTypeString = (value: unknown): string =>
|
||||||
objectToString.call(value)
|
objectToString.call(value)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user