Ive been struggling for a while to get this code to work properly. Basically im hitting an api to get values and add them to a table. My great idea was to take the parameter im sending from the response to the api call and group them together each time in an array so they dont get mixed up. the Ive attempted async:false, different varieties of using promises inside a loop and outside.
Can anyone please crack this nut for me so i can be a better programmer? i have a simplified version of the code here (please note i have used some things for examples):
var slotId = [];
var status = [];
var slotFromAjax =[];
var UnAuthIssue;
var AuthIssue;
var AuthStep;
var UnAuthStep;
var TLD;
var mySpace;
var authStepColour;
var authIssueColour;
var unAuthStepColour;
var unAuthIssueColour;
var url;
var slotNumber;
var messages2 = [92578, 95157];
if (document.getElementById("tickets_list_whlist")) {
var table = document.getElementById("tickets_list_whlist");
} else {
console.log('no table');
}
function makeHttpRequest(messages2) {
return new Promise((resolve, reject) => {
var promises = [];
for (var k = 0; k < messages2.length; k++) {
promises.push(
new Promise((resolve, reject) => {
GM.xmlHttpRequest({
method: "GET",
url:
"example.com/api/"+messages2[k],
headers: {
"Content-Type": "application/json",
"Origin": "https://example.com", // replace with your domain
},
onload: (response) => {
if (response.status == 200) {
var NewJson = JSON.parse(response.responseText);
if (NewJson.collection[0].schemas[1] !== undefined) {
slotNumber = NewJson.collection[0].slot;
if (NewJson.collection[0].schemas[0].workflow == "Yes") {
AuthStep = NewJson.collection[0].schemas[0].step;
UnAuthStep = NewJson.collection[0].schemas[1].step;
AuthIssue = NewJson.collection[0].schemas[0].issue;
UnAuthIssue = NewJson.collection[0].schemas[1].issue;
}
if (AuthStep) {
if (
AuthStep == "Complete"
) {
if (UnAuthIssue === undefined) {
UnAuthIssue = "No issue";
} else if (
AuthIssue == "" ||
AuthIssue == null ||
AuthIssue == ""
) {
AuthIssue = "No Issue";
authStepColour = "green";
authIssueColour = "black";
}
slotFromAjax.push([slotNumber, AuthStep]);
}
}
}
resolve(response);
} else {
reject(response);
}
},
onerror: (error) => {
reject(error);
},
});
})
);
}
Promise.all(promises)
.then(() => {
resolve(slotFromAjax);
})
.catch((error) => {
reject(error);
});
});
}
function firstFunction() {
console.log("Running first function");
return makeHttpRequest(messages2);
}
function secondFunction(data) {
// This function runs second and depends on the data returned by the HTTP request
console.log("Running second function with data:", data);
return Promise.resolve();
}
function thirdFunction() {
console.log("Running third function");
}
// Call the functions in order using Promises
firstFunction()
.then((data) => {
return secondFunction(data);
})
.then(() => {
thirdFunction();
})
.catch((error) => {
console.error(error);
console.log("Error outer promise");
});