mirror of
https://gitee.com/vant-contrib/vant.git
synced 2025-04-06 03:57:59 +08:00
36 lines
778 B
TypeScript
36 lines
778 B
TypeScript
import { isPromise, noop } from '.';
|
|
|
|
export type Interceptor = (...args: any[]) => Promise<boolean> | boolean;
|
|
|
|
export function callInterceptor(options: {
|
|
interceptor?: Interceptor;
|
|
args?: any[];
|
|
done: () => void;
|
|
canceled?: () => void;
|
|
}) {
|
|
const { interceptor, args, done, canceled } = options;
|
|
|
|
if (interceptor) {
|
|
// eslint-disable-next-line prefer-spread
|
|
const returnVal = interceptor.apply(null, args || []);
|
|
|
|
if (isPromise(returnVal)) {
|
|
returnVal
|
|
.then((value) => {
|
|
if (value) {
|
|
done();
|
|
} else if (canceled) {
|
|
canceled();
|
|
}
|
|
})
|
|
.catch(noop);
|
|
} else if (returnVal) {
|
|
done();
|
|
} else if (canceled) {
|
|
canceled();
|
|
}
|
|
} else {
|
|
done();
|
|
}
|
|
}
|