How to concatenate two array by using two request in javascript with mailchimp?

63 Views Asked by At

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)
2

There are 2 best solutions below

8
Ketan Ramteke On BEST ANSWER

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);

3
Reyno On

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);
});