0.0.2 • Published 12 months ago

idempotent-query-helper v0.0.2

Weekly downloads
-
License
MIT
Repository
-
Last release
12 months ago

idempotent-query-helper

Idempotent Request Helper

Features

  • batch operation
  • order return

Install

npm install idempotent-query-helper

or

yarn add idempotent-query-helper

Install

npm install tool-library-template

Or

yarn add tool-library-template

Usage

parameter

interface IdenpotentQueryFunParams<T, R> {
  /** request function */
  queryFun: (param: any) => any;
  /** array of request parameters */
  queryParams: T[];
  /** configuration item */
  options: {
    /** Parameters requested after grouping */
    queryKey?: string;
    /** concurrent number  */
    concurrency?: number;
    /** The key of the idempotent request parameter */
    traceIdKey?: string;
    /** Get tradeId according to current parameters and index  */
    getTraceId?: GetTraceIdFun<T>;
    /** Waiting time after defeat (milliseconds) */
    sleepTime?: number;
    /** The number of arrays in a single request */
    singleQueryParamsCount?: number;
    /** A number or a function that generates a number based on the current error  */
    retryTime?: number | GetRetryTimeByErrorFun;
    /** Determine whether to continue retrying based on the current error  */
    getIsRunningByError?: GetIsRunningByErrorFun;
    /** Execute function after a single request  */
    singleQueryDone?: QueryDoneFun<R>;
  };
}
参数说明类型默认值
queryFunrequest functionfunction-
queryParamsarray of request parametersparam[][]
options.queryKeyParameters requested after groupingkeystring'batchQueryItem'
options.concurrencyconcurrent numbernumber6
options.traceIdKeyThe key of the idempotent request parameterstring'traceId'
options.sleepTimeWaiting time after defeat (milliseconds)number2000
options.singleQueryParamsCountThe number of arrays in a single requestnumber1
options.getTraceIdGet tradeId according to current parameters and indextradeIdfunction(item, index) => string
options.retryTimeA number or a function that generates a number based on the current errornumber|function3
options.getIsRunningByErrorDetermine whether to continue retrying based on the current errorfunction-
options.singleQueryDoneExecute function after a single requestfunction-

return value

export interface QueryFunResult<R> {
  /** success or error */
  status: 'success' | 'error';
  /** Corresponding to the above success or failure, return result or error */
  result: R | unknown;
}

example

const errCode: Record<string, number> = {};
const result = await idenpotentQuery({
  // request function
  queryFun: (params: any) => {
    const currentParamsStr = JSON.stringify(params);
    errCode[currentParamsStr] = (errCode[currentParamsStr] || 0) + 1;
    // 第一次和第二次会报错
    if (errCode[currentParamsStr] < 3) {
      throw new Error('retry');
    }
    return sleep(10).then(() => params.batchQueryItem);
  },
  // current request parameter
  queryParams: [3, 2, 1],
  options: {
    // The generated traceId backend must be unique within a certain period of time
    getTraceId: (item, index) => `${index}`,
    // number of retries
    retryTime: () => 2,
    // Number of concurrent requests 2
    concurrency: 2,
    // The number of arrays in a single request
    singleQueryParamsCount: 2,
  },
});

// return result
[
  {
    status: 'success'
    result: [3,2]
  },
  {
    status: 'success'
     result: [1]
  },
]

// errCode[currentParamsStr] < 3
// changed to
// errCode[currentParamsStr] < 4
// return result
[
  {
    status: 'error'
    result: [Error: retry],
  },
  {
    status: 'error'
    result: [Error: retry],
  },
]

Changelog

  • 0.0.1 basically available
0.0.2

12 months ago

0.0.1

12 months ago