feat(HTTP Request Node): Interval Between Requests option for pagination (#8224)

## Summary
Option to add delay between request when using pagination

![image](https://github.com/n8n-io/n8n/assets/88898367/df93f9c7-2569-4d22-a719-494d9dfe8030)

## Related tickets and issues

https://linear.app/n8n/issue/NODE-1029/http-request-pagination-feature-doesnt-use-batch-settings
https://github.com/n8n-io/n8n/issues/8062
This commit is contained in:
Michael Kret 2024-01-04 17:11:16 +02:00 committed by GitHub
parent b50d8058cf
commit 270328ccf6
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 0 deletions

View file

@ -115,6 +115,7 @@ import {
ExecutionBaseError,
jsonParse,
ApplicationError,
sleep,
} from 'n8n-workflow';
import type { Token } from 'oauth-1.0a';
import clientOAuth1 from 'oauth-1.0a';
@ -2748,6 +2749,9 @@ const getRequestHelperFunctions = (
) as boolean;
if (makeAdditionalRequest) {
if (paginationOptions.requestInterval) {
await sleep(paginationOptions.requestInterval);
}
if (tempResponseData.statusCode < 200 || tempResponseData.statusCode >= 300) {
// We have it configured to let all requests pass no matter the response code
// via "requestOptions.simple = false" to not by default fail if it is for example

View file

@ -1143,6 +1143,23 @@ export class HttpRequestV3 implements INodeType {
default: 100,
description: 'Maximum amount of request to be make',
},
{
// eslint-disable-next-line n8n-nodes-base/node-param-display-name-miscased
displayName: 'Interval Between Requests (ms)',
name: 'requestInterval',
type: 'number',
displayOptions: {
hide: {
paginationMode: ['off'],
},
},
default: 0,
description: 'Time in milliseconds to wait between requests',
hint: 'At 0 no delay will be added',
typeOptions: {
minValue: 0,
},
},
],
},
],
@ -1272,6 +1289,7 @@ export class HttpRequestV3 implements INodeType {
completeExpression: string;
limitPagesFetched: boolean;
maxRequests: number;
requestInterval: number;
};
for (let itemIndex = 0; itemIndex < items.length; itemIndex++) {
@ -1653,6 +1671,7 @@ export class HttpRequestV3 implements INodeType {
const paginationData: PaginationOptions = {
continue: continueExpression,
request: {},
requestInterval: pagination.requestInterval,
};
if (pagination.paginationMode === 'updateAParameterInEachRequest') {

View file

@ -526,6 +526,7 @@ export interface PaginationOptions {
binaryResult?: boolean;
continue: boolean | string;
request: IRequestOptionsSimplifiedAuth;
requestInterval: number;
maxRequests?: number;
}