Estoy codificando en Node.js y me gustaría usar el método de aceleración de lodash en una variedad de solicitudes de axios. Tengo un proceso, que se ejecuta en una función lambda de AWS, que recibe como entrada una matriz de parámetros. Cada uno de estos parámetros se usa para configurar una solicitud de axios a una API externa y hacer algo con los datos en la respuesta. Así, por ejemplo, si obtenemos 1000 parámetros en esta matriz, será necesario realizar 1000 llamadas a esta API externa.
En mi ejemplo, makeCallToApi es una clase importada definida en otro lugar, que contiene una función asíncrona estática ejecutar (parámetro) que construye una configuración de solicitud para axios usando el parámetro de entrada (usado en la construcción de la url) y luego intenta devolver la respuesta de esperar axios ( configuración).
await Promise.all( arrayOfParams.map(async (param) => { const data = await makeCallToApi.execute(param); await myMongooseModel.create(formatData(data)); }) );
La API externa tiene un límite de velocidad, por lo que quiero acelerar estas solicitudes para evitar alcanzar su límite. ¿Cómo usaría _.throttle para hacer esto? Tengo el siguiente ejemplo a continuación, que sé que está mal y me gustaría entender cómo reescribir correctamente:
// in the file where makeCallToApi is defined: const throttledCallToApi = _.throttle(axios); export class makeCallToApi { static async execute(param) { const config = ... // construct the request config; url = `${baseUrl}/example-api/${param}` try { const response = await throttledAxios(config); return response?.data; } catch (err) { // error-handling stuff } } } // then, in my main code... await Promise.all( arrayOfParams.map(async (param) => { const data = throttledCallToApi(param); await myMongooseModel.create(formatData(data)); }) );
El problema con esto es que, aunque estoy recorriendo las entradas en arrayOfParams, se sigue llamando a throttledCallToApi() con el valor del primer parámetro en arrayOfParams. ¿Qué estoy haciendo incorrectamente al usar _.throttle()?