0

The title may not very clear. I'm gonna explain my problem.

Here is my code:

mailchimpMarketing = require("@mailchimp/mailchimp_marketing");

mailchimpMarketing.setConfig({
apiKey: "MY API KEY",
server: "MY SERVER",
});

const getEmailMembersFromList = async (listID, offset , count) => {
  const response = await mailchimpMarketing.lists.getListMembersInfo(listID, {offset, count});
    emails = response.members.map(member => {
      return member.email_address
    })
  console.log(emails)
}

getEmailMembersFromList("MY LIST ID", 0, 1000)
getEmailMembersFromList("MY LIST ID", 1000, 58)

It display in the terminal two arrays of emails addresses. I have to make two calls because there is more than 1000 emails addresses (1058 in total) and the maximum is 1000.

Now I want to concatenate those two array, maybe with the .concat() method but I don't know how to do it in my case.

EDIT 1

mailchimpMarketing = require("@mailchimp/mailchimp_marketing");

mailchimpMarketing.setConfig({
apiKey: "MY API KEY",
server: "MY SERVER",
});

const getEmailMembersFromList = async (listID, offset , count) => {
  const response = await mailchimpMarketing.lists.getListMembersInfo(listID, {offset, count});
    emails = response.members.map(member => {
      return member.email_address
    })
  //console.log(emails)
  return emails
}

getEmailMembersFromList("MY LIST ID", 0, 1000)
getEmailMembersFromList("MY LIST ID", 1000, 58)
Samy Rharade
  • 95
  • 1
  • 7

2 Answers2

1

Try this code:

let result = [];

const getEmailMembersFromList = async (listID, offset, count) => {
  await mailchimpMarketing.lists
    .getListMembersInfo(listID, { offset, count })
    .then((response) => {
      emails = response.members.map((member) => {
        return member.email_address;
      });
      // try using spread operator, hopefully it should work
      result = [...result, ...emails];
    });
};

getEmailMembersFromList("MY LIST ID", 0, 1000);
getEmailMembersFromList("MY LIST ID", 1000, 58);

console.log(result);

Ketan Ramteke
  • 10,183
  • 2
  • 21
  • 41
0

Since async functions always return a promise you could add all requests into an array and use Promise.all() to get all the data.

FYI: you are not returning anything from your getEmailMembersFromList function which is necessary to get it to work.

Example:

const firstGroup = getEmailMembersFromList("MY LIST ID", 0, 1000);
const secondGroup = getEmailMembersFromList("MY LIST ID", 1000, 58);

Promise.all([firstGroup, secondGroup]).then((values) => {
  console.log(values);
});
Reyno
  • 6,119
  • 18
  • 27