Good day. I am trying to work with JavaScript global variables when getting data from an external API however when I edit the data of the devList variable in the req2.onreadystatechange()  the changes aren't permanent as in the last line where I try to add it to the table devList is empty. Please advise on why the variable changes aren't permanent. Also when I populate the table within the req2.onreadystatechange()  the table is populated in some random order every time I refresh the page but then the devList  is used correctly. I have also tried using window.devList everywhere but with the same failed result.
const req1=new XMLHttpRequest();
const rawgAPIkey="*******************"; //real key is used here
const baseurl="https://api.rawg.io/api";
const url=new URL(baseurl+"/games");
var tbl=document.getElementById("gametable");
url.searchParams.set("key", rawgAPIkey);
var devList = "";
req1.open("GET", url);
req1.responseType="text";
req1.send();
req1.onreadystatechange=function(){
    if(req1.readyState===4 && req1.status===200){
        var gameArr = JSON.parse(req1.responseText).results;
        for (let index = 0; index < gameArr.length; index++) {
            var game;
            var url2=new URL(baseurl+"/games/"+gameArr[index].id);
            url2.searchParams.set("key", rawgAPIkey);
            const element = gameArr[index];
            const req2=new XMLHttpRequest();
            req2.open("GET", url2);
            req2.responseType="text";
            req2.send();
            var developer="";
            req2.onreadystatechange=function(){
                devList = "";
                if(req2.readyState===4 && req2.status===200){
                    var gamedevs=JSON.parse(req2.responseText).developers;
                    for (let i = 0; i < gamedevs.length; i++) {
                        devList += gamedevs[i].name + ", "; 
                    }
                    console.log(devList);
            }
            }
            tbl.innerHTML+=
            "<tr>"
            +" <td> " + " <p> " + gameArr[index].name +  " </p> "
            + "<img class=\"gamepic\" src=\" "+ gameArr[index].background_image + " \"               alt=\"CS:GO\">" + " </td> "
            + "<td>" + devList + "</td>";
            
        }
    } 
}
EDIT: I have now done the following with promises but it still does not populate the developer column. Please advise if I used promises wrong.
async function getDev(){
                let myProm= new Promise (function(success, fail){
                    const req2= new XMLHttpRequest();
                    req2.open("GET", url2);
                    req2.responseType="text";
                    
                    req2.onload=function(){
                        if(req2.status===200){
                            var gamedevs=JSON.parse(req2.responseText).developers;
                            devList="";
                            for (let i = 0; i < gamedevs.length; i++) {
                                devList += gamedevs[i].name + " ";
                            }
                            success(devList);
                        }else{
                            fail("Developer unavailable");
                        } 
                    };
                    req2.send(); 
                });
                document.getElementById(curDev).innerHTML= await getDev();
            }
            getDev();
 
    