mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-17 10:02:05 +00:00
refactor(core): Simplify createDeferredPromise, and add tests (no-changelog) (#10811)
This commit is contained in:
committed by
GitHub
parent
d647ef41ac
commit
cef64329a9
@@ -1,14 +1,17 @@
|
||||
// From: https://gist.github.com/compulim/8b49b0a744a3eeb2205e2b9506201e50
|
||||
type ResolveFn<T> = (result: T | PromiseLike<T>) => void;
|
||||
type RejectFn = (error: Error) => void;
|
||||
|
||||
export interface IDeferredPromise<T> {
|
||||
promise: () => Promise<T>;
|
||||
reject: (error: Error) => void;
|
||||
resolve: (result: T) => void;
|
||||
promise: Promise<T>;
|
||||
resolve: ResolveFn<T>;
|
||||
reject: RejectFn;
|
||||
}
|
||||
|
||||
export async function createDeferredPromise<T = void>(): Promise<IDeferredPromise<T>> {
|
||||
return await new Promise<IDeferredPromise<T>>((resolveCreate) => {
|
||||
const promise = new Promise<T>((resolve, reject) => {
|
||||
resolveCreate({ promise: async () => await promise, resolve, reject });
|
||||
});
|
||||
export function createDeferredPromise<T = void>(): IDeferredPromise<T> {
|
||||
const deferred: Partial<IDeferredPromise<T>> = {};
|
||||
deferred.promise = new Promise<T>((resolve, reject) => {
|
||||
deferred.resolve = resolve;
|
||||
deferred.reject = reject;
|
||||
});
|
||||
return deferred as IDeferredPromise<T>;
|
||||
}
|
||||
|
||||
@@ -728,7 +728,7 @@ export interface ICredentialTestFunctions {
|
||||
}
|
||||
|
||||
interface BaseHelperFunctions {
|
||||
createDeferredPromise: <T = void>() => Promise<IDeferredPromise<T>>;
|
||||
createDeferredPromise: <T = void>() => IDeferredPromise<T>;
|
||||
}
|
||||
|
||||
interface JsonHelperFunctions {
|
||||
|
||||
22
packages/workflow/test/DeferredPromise.test.ts
Normal file
22
packages/workflow/test/DeferredPromise.test.ts
Normal file
@@ -0,0 +1,22 @@
|
||||
import { createDeferredPromise } from '@/DeferredPromise';
|
||||
|
||||
describe('DeferredPromise', () => {
|
||||
it('should resolve the promise with the correct value', async () => {
|
||||
let done = false;
|
||||
const deferred = createDeferredPromise<string>();
|
||||
void deferred.promise.finally(() => {
|
||||
done = true;
|
||||
});
|
||||
expect(done).toBe(false);
|
||||
deferred.resolve('test');
|
||||
await expect(deferred.promise).resolves.toBe('test');
|
||||
expect(done).toBe(true);
|
||||
});
|
||||
|
||||
it('should reject the promise with the correct error', async () => {
|
||||
const deferred = createDeferredPromise();
|
||||
const error = new Error('test error');
|
||||
deferred.reject(error);
|
||||
await expect(deferred.promise).rejects.toThrow(error);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user