At the end of the execution the table object has a length of 13 in console log but table.rows[4], for example, returns undefined and console.log(table.rows.length) returns 1. I assume it has something to do with the promise because values added outside of it gets added fine. How would I achieve this from inside the promise?
let table = new Table();
let row = new Row();
row.AddColumn('"Business Group"');
row.AddColumn('"Security Profile"');
row.AddColumn('"User ID"');
row.AddColumn('"Name"');
table.AddRow(row);
pnp.sp.web.siteGroups.get().then(function(data) {
for (var i = 0; i < data.length; i++) {
pnp.sp.web.siteGroups.getByName(data[i].Title).users.get().then(function(result) {
for (var i = 0; i < result.length; i++) {
row = new Row();
row.AddColumn('"Business Group"');
row.AddColumn(`"${data[i].Title}"`);
row.AddColumn(`"${result[i].id}}"`);
row.AddColumn(`"${result[i].Title}}"`);
table.AddRow(row);
}
}).catch(function(err) {
alert("Group not found: " + err);
});
}
});
console.log(table);
console.log(table.rows[4]);
console.log(table.rows.length);
Edit Thank you Phil, this worked
let table = new Table();
let row = new Row();
row.AddColumn('"Business Group"');
row.AddColumn('"Security Profile"');
row.AddColumn('"User ID"');
row.AddColumn('"Name"');
table.AddRow(row);
let promises = [];
pnp.sp.web.siteGroups.get().then(function(data) {
for (var i = 0; i < data.length; i++) {
promises.push(pnp.sp.web.siteGroups.getByName(data[i].Title).users.get());
}
Promise.all(promises)
.then((result) => {
for (var i = 0; i < result.length; i++) {
row = new Row();
row.AddColumn('"Business Group"');
row.AddColumn(`"${data[i].Title}"`);
row.AddColumn(`"${result[i].id}}"`);
row.AddColumn(`"${result[i].Title}}"`);
table.AddRow(row);
}
console.log(table);
console.log(table.rows[4]);
console.log(table.rows.length);
})
.catch((e) => {
// Handle errors here
});
});