@turbox3d/reactivity
Version:
Large-scale reactive state management library
24 lines (22 loc) • 801 B
text/typescript
import { isPromise } from '@turbox3d/shared';
import { DispatchedAction, Dispatch } from '../interfaces';
export function normalNextReturn(next: Dispatch, dispatchedAction: DispatchedAction, callback?: () => void, errorCallback?: (error: string) => void) {
const result = next(dispatchedAction);
if (isPromise(result)) {
return new Promise<any>((resolve, reject) => {
(result as Promise<any>).then((res) => {
callback && callback();
resolve(res);
}).catch((error: Error) => {
errorCallback && errorCallback(error.stack || error.message);
reject(error);
});
});
}
if (result && result instanceof Error) {
errorCallback && errorCallback(result.stack || result.message);
} else {
callback && callback();
}
return result;
}