提交 b26effea 编写于 作者: fxy060608's avatar fxy060608

feat: add interceptor

上级 d71192c1
......@@ -214,6 +214,7 @@ export function defineTaskApi<T extends TaskApiLike, P = AsyncApiOptions<T>>(
options?: ApiOptions<T>
) {
return promisify(
name,
wrapperTaskApi(name, fn, __DEV__ ? protocol : undefined, options)
) as unknown as T
}
......@@ -245,6 +246,7 @@ export function defineAsyncApi<T extends AsyncApiLike, P = AsyncApiOptions<T>>(
options?: ApiOptions<T>
) {
return promisify(
name,
wrapperAsyncApi(name, fn as any, __DEV__ ? protocol : undefined, options)
) as AsyncApi<P>
}
......
import { extend, isPlainObject, isFunction } from '@vue/shared'
import { invokeApi, wrapperReturnValue } from '../interceptor'
import { API_SUCCESS, API_FAIL, API_COMPLETE } from './callback'
......@@ -25,15 +26,18 @@ export function handlePromise(promise: Promise<unknown>) {
return promise
}
export function promisify(fn: Function) {
export function promisify(name: string, fn: Function) {
return (args = {}) => {
if (hasCallback(args)) {
return fn(args)
return wrapperReturnValue(name, invokeApi(name, fn, args))
}
return handlePromise(
new Promise((resolve, reject) => {
fn(extend(args, { success: resolve, fail: reject }))
})
return wrapperReturnValue(
name,
handlePromise(
new Promise((resolve, reject) => {
invokeApi(name, fn, extend(args, { success: resolve, fail: reject }))
})
)
)
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册