refactor(core): Simplify createDeferredPromise, and add tests (no-changelog) (#10811)

This commit is contained in:
कारतोफ्फेलस्क्रिप्ट™
2024-09-13 15:53:03 +02:00
committed by GitHub
parent d647ef41ac
commit cef64329a9
14 changed files with 66 additions and 43 deletions

View File

@@ -208,11 +208,11 @@ export class AmqpTrigger implements INodeType {
let responsePromise: IDeferredPromise<IRun> | undefined = undefined;
if (!parallelProcessing) {
responsePromise = await this.helpers.createDeferredPromise();
responsePromise = this.helpers.createDeferredPromise();
}
if (responsePromise) {
this.emit([this.helpers.returnJsonArray([data as any])], undefined, responsePromise);
await responsePromise.promise();
await responsePromise.promise;
} else {
this.emit([this.helpers.returnJsonArray([data as any])]);
}

View File

@@ -507,7 +507,7 @@ export class EmailReadImapV1 implements INodeType {
return newEmails;
};
const returnedPromise = await this.helpers.createDeferredPromise();
const returnedPromise = this.helpers.createDeferredPromise();
const establishConnection = async (): Promise<ImapSimple> => {
let searchCriteria = ['UNSEEN'] as Array<string | string[]>;
@@ -560,7 +560,7 @@ export class EmailReadImapV1 implements INodeType {
});
// Wait with resolving till the returnedPromise got resolved, else n8n will be unhappy
// if it receives an error before the workflow got activated
await returnedPromise.promise().then(() => {
await returnedPromise.promise.then(() => {
this.emitError(error as Error);
});
}

View File

@@ -535,7 +535,7 @@ export class EmailReadImapV2 implements INodeType {
return newEmails;
};
const returnedPromise = await this.helpers.createDeferredPromise();
const returnedPromise = this.helpers.createDeferredPromise();
const establishConnection = async (): Promise<ImapSimple> => {
let searchCriteria = ['UNSEEN'] as Array<string | string[]>;
@@ -590,7 +590,7 @@ export class EmailReadImapV2 implements INodeType {
});
// Wait with resolving till the returnedPromise got resolved, else n8n will be unhappy
// if it receives an error before the workflow got activated
await returnedPromise.promise().then(() => {
await returnedPromise.promise.then(() => {
this.emitError(error as Error);
});
}

View File

@@ -11,7 +11,7 @@ import type {
ITriggerResponse,
IRun,
} from 'n8n-workflow';
import { createDeferredPromise, NodeConnectionType, NodeOperationError } from 'n8n-workflow';
import { NodeConnectionType, NodeOperationError } from 'n8n-workflow';
export class KafkaTrigger implements INodeType {
description: INodeTypeDescription = {
@@ -281,13 +281,13 @@ export class KafkaTrigger implements INodeType {
}
let responsePromise = undefined;
if (!parallelProcessing && (options.nodeVersion as number) > 1) {
responsePromise = await createDeferredPromise<IRun>();
responsePromise = this.helpers.createDeferredPromise<IRun>();
this.emit([this.helpers.returnJsonArray([data])], undefined, responsePromise);
} else {
this.emit([this.helpers.returnJsonArray([data])]);
}
if (responsePromise) {
await responsePromise.promise();
await responsePromise.promise;
}
},
});

View File

@@ -140,11 +140,11 @@ export class MqttTrigger implements INodeType {
if (this.getMode() === 'trigger') {
const donePromise = !options.parallelProcessing
? await this.helpers.createDeferredPromise<IRun>()
? this.helpers.createDeferredPromise<IRun>()
: undefined;
client.on('message', async (topic, payload) => {
this.emit(parsePayload(topic, payload), undefined, donePromise);
await donePromise?.promise();
await donePromise?.promise;
});
await client.subscribeAsync(topicsQoS);
}

View File

@@ -283,10 +283,9 @@ export class RabbitMQTrigger implements INodeType {
let responsePromiseHook: IDeferredPromise<IExecuteResponsePromiseData> | undefined =
undefined;
if (acknowledgeMode !== 'immediately' && acknowledgeMode !== 'laterMessageNode') {
responsePromise = await this.helpers.createDeferredPromise();
responsePromise = this.helpers.createDeferredPromise();
} else if (acknowledgeMode === 'laterMessageNode') {
responsePromiseHook =
await this.helpers.createDeferredPromise<IExecuteResponsePromiseData>();
responsePromiseHook = this.helpers.createDeferredPromise<IExecuteResponsePromiseData>();
}
if (responsePromiseHook) {
this.emit([[item]], responsePromiseHook, undefined);
@@ -295,7 +294,7 @@ export class RabbitMQTrigger implements INodeType {
}
if (responsePromise && acknowledgeMode !== 'laterMessageNode') {
// Acknowledge message after the execution finished
await responsePromise.promise().then(async (data: IRun) => {
await responsePromise.promise.then(async (data: IRun) => {
if (data.data.resultData.error) {
// The execution did fail
if (acknowledgeMode === 'executionFinishesSuccessfully') {
@@ -308,7 +307,7 @@ export class RabbitMQTrigger implements INodeType {
messageTracker.answered(message);
});
} else if (responsePromiseHook && acknowledgeMode === 'laterMessageNode') {
await responsePromiseHook.promise().then(() => {
await responsePromiseHook.promise.then(() => {
channel.ack(message);
messageTracker.answered(message);
});

View File

@@ -22,7 +22,7 @@ export async function executeWorkflow(testData: WorkflowTestData, nodeTypes: INo
nodeTypes,
settings: testData.input.workflowData.settings,
});
const waitPromise = await createDeferredPromise<IRun>();
const waitPromise = createDeferredPromise<IRun>();
const nodeExecutionOrder: string[] = [];
const additionalData = Helpers.WorkflowExecuteAdditionalData(waitPromise, nodeExecutionOrder);
@@ -50,6 +50,6 @@ export async function executeWorkflow(testData: WorkflowTestData, nodeTypes: INo
const workflowExecute = new WorkflowExecute(additionalData, executionMode, runExecutionData);
executionData = await workflowExecute.processRunExecutionData(workflowInstance);
const result = await waitPromise.promise();
const result = await waitPromise.promise;
return { executionData, result, nodeExecutionOrder };
}