Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const delay = require('delay');
- const callAwsPaginatedMethod = (service, method, methodParams, maxRPS = 0) => {
- const getPagingToken = ({
- PaginationToken, position, NextToken, NextContinuationToken,
- }) => (
- (PaginationToken && { PaginationToken })
- || (position && { position })
- || (NextToken && { NextToken })
- || (NextContinuationToken && { ContinuationToken: NextContinuationToken })
- );
- const retrievedData = [];
- const getResults = async (params) => {
- try {
- const preRunTime = Date.now();
- const data = await service[method](params).promise();
- retrievedData.push(data);
- // don't submit too many requests - put in a delay if passed as a param and more results to fetch.
- if (maxRPS && getPagingToken(data)) {
- await delay((preRunTime - Date.now() + 1000 / maxRPS));
- }
- if (getPagingToken(data)) {
- return getResults(Object.assign(params, getPagingToken(data)));
- }
- } catch (e) {
- console.log(`Error: calling AWS cli ${JSON.stringify(e)}`);
- return Promise.reject(e);
- }
- return Promise.resolve(retrievedData);
- };
- return getResults(methodParams);
- };
- const flattenAwsMethodResults = (dataArr, element) => [].concat(...dataArr.map(data => data[element]));
- module.exports = {
- callAwsPaginatedMethod,
- flattenAwsMethodResults,
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement