У меня проблема с отображением массива и данных «arrayOfResults», но когда я пытаюсь получить доступ к определенной части массива, появляется сообщение undefined.Я знаю, что это как-то связано с асинхронным вызовом, потому что, если я помещаю console.log в тайм-аут, он отображается правильно.Я довольно плохо знаком с асинхронными вызовами в целом, не говоря уже о ожидании.Спасибо за помощь!
async function convertToCSV() {
var userInput = document.getElementById("policyList").value; //value from text area
var arrayOfUserInput = userInput.split('\n').map(str => str.replace(/\s/g, '')); //converts userInput to array and removes whitespace
var arrayOfResults = new Array();
//iterates for how many user inputs are recorded into arrayOfUserInput
for(i = 0; i < arrayOfUserInput.length; i++){
//awaits for each result of retrieve data before inputing into arrayofresults
arrayOfResults[i] = await retrieveData(arrayOfUserInput[i]);
}
//*****THIS IS THE PART NOT WORKING CORRECTLY****
console.log(arrayOfResults[0][0]);
}
async function retrieveData (clientRecord){
//pulling data from retrieve_policy API
var request = require("request");
var resultsArr = new Array();
var options = { method: 'POST',
url: 'https://alamance.britecorepro.com/api/v2/policies/retrieve_policy',
body: '{\n\t"api_key": "7f37b0b074cedffe559b8fabc0244*****e52bff6eb31205e9d9f442",\n\t"policy_number": "' +clientRecord+ '"\n}' };
request(options, function (error, response, body) {
var resData = JSON.parse(body); //stores json response into object
//checks to see if record exists, if not then it stores API provided error message
if(resData.data.policy_number !== undefined){
var credCheckLength = resData.data.active_revision.named_insureds[0].credit_reports.length //holds array length of credit checks
var policyNumber = resData.data.policy_number; //policy number
var name = resData.data.active_revision.named_insureds[0].name; //name
var creditScore = resData.data.active_revision.named_insureds[0].credit_reports[credCheckLength-1].score; //credit score
var creditCheckDate = resData.data.active_revision.named_insureds[0].credit_reports[credCheckLength-1].date_updated; //date,time credit score updated
resultsArr[0]=policyNumber, resultsArr[1]=name, resultsArr[2]=creditScore, resultsArr[3]=creditCheckDate; //to insure proper order on return
}
else{
resultsArr[0] =resData.messages[0];
}
});
return resultsArr;
}
Когда я console.log arrayOfResults [0], я получаю все данные правильно.
Когда я console.log arrayOfResults [0] [0] likeвыше я получаю неопределенное значение, если не введу тайм-аут для фактического ожидания результатов.