Why does browser.tabs.sendMessage(tab.id, connectionStatus);
at the end of the code below get executed before the forEach loop above it is done?
browser.browserAction.onClicked.addListener(async tab => {
const contentScriptReady = Promise.all([
browser.tabs.executeScript(tab.id, {file: "axios.min.js"}),
browser.tabs.executeScript(tab.id, {file: "content.js"}),
browser.tabs.executeScript(tab.id, { file: "sweetalert2.all.min.js" }),
browser.tabs.insertCSS(tab.id, { file: "styles.css" })
]);
const connectionStatus = {};
var querying = browser.tabs.query({currentWindow: true, active: true});
querying.then(logTabs, onError);
function logTabs(tabs) {
for (let tab of tabs) {
var thisTab = tabs[0];
var url = thisTab.url;
var urlString = new URL(url);
var childHSAId = urlString.searchParams.get("childhsaid");
if (childHSAId) {
var healthcareFacilityHSAId = urlString.searchParams.get("hsaid");
connectionStatus.healthcareFacilityHSAId = healthcareFacilityHSAId;
connectionStatus.childHSAId = childHSAId;
// SE2321000057-9251 måste ändras till childHSAId
getConnectionStatusData("SE2321000057-9251");
} else {
// SE2321000057-9251 måste ändras till urlString.searchParams.get("hsaId")
var healthcareFacilityHSAId = "SE2321000057-9251";
connectionStatus.healthcareFacilityHSAId = healthcareFacilityHSAId;
// SE2321000057-9251 måste ändras till healthcareFacilityHSAId
getConnectionStatusData("SE2321000057-9251");
}
}
}
function onError(error) {
console.log(`Error: ${error}`);
}
async function getConnectionStatusData(logicalAddress) {
console.log("Det här är logicalAddress: " + logicalAddress);
let serviceDomains = await axios.get('http://api.ntjp.se/coop/api/v1/serviceDomains.json', {
params: {
namespace: "crm:scheduling"
}
});
serviceDomainId = serviceDomains.data[0].id;
let connectionPoints = await axios.get('http://api.ntjp.se/coop/api/v1/connectionPoints.json', {
params: {
platform: "NTJP",
environment: "PROD"
}
});
connectionPointId = connectionPoints.data[0].id;
var d = new Date(connectionPoints.data[0].snapshotTime);
var options = { hour: '2-digit', minute:'2-digit' };
var snapshotTime = d.toLocaleDateString('se-SE', options)
connectionStatus.snapshotTime = snapshotTime;
let logicalAddresss = await axios.get('http://api.ntjp.se/coop/api/v1/logicalAddresss.json', {
params: {
logicalAdress: logicalAddress,
serviceConsumerHSAId: "SE2321000016-92V4",
connectionPointId: connectionPointId
}
});
if (logicalAddresss.data === undefined || logicalAddresss.data.length == 0) {
connectionStatus.errorMessage = "HSA-id " + logicalAddress + " är inte registrerat i Ineras API för Etablerad samverkan i vården. API:t uppdaterades med data från Nationella tjänsteplattformens tjänstekatalog vid " + snapshotTime + ".";
browser.tabs.sendMessage(tab.id, connectionStatus);
return;
} else {
logicalAddressId = logicalAddresss.data[0].id;
}
let serviceConsumers = await axios.get('http://api.ntjp.se/coop/api/v1/serviceConsumers.json', {
params: {
connectionPointId: connectionPointId,
logicalAddressId: logicalAddressId
}
});
consumer = serviceConsumers.data.filter(obj => {
return obj.hsaId === "SE2321000016-92V4";
});
serviceConsumerId = consumer[0].id;
let cooperations = await axios.get('http://api.ntjp.se/coop/api/v1/cooperations.json', {
params: {
connectionPointId: connectionPointId,
logicalAddressId: logicalAddressId,
serviceDomainId: serviceDomainId,
serviceConsumerId: serviceConsumerId,
include: "serviceContract"
}
});
cooperations.data.forEach(function(cooperation) {
axios.get('http://api.ntjp.se/coop/api/v1/serviceProducers.json', {
params: {
connectionPointId,
logicalAddressId,
serviceDomainId,
serviceConsumerId,
serviceContractId: cooperation.serviceContract.id,
},
}).then(response => {
serviceContract = cooperation.serviceContract.namespace.replace('urn:riv:crm:scheduling:','').replace('Responder:1','');
connectionStatus[serviceContract] = {
"supported": true,
"serviceProducerDescription": response.data[0].description,
"serviceProducerHSAId": response.data[0].hsaId
};
});
});
browser.tabs.sendMessage(tab.id, connectionStatus);
} /* getConnectionStatusData */
}); /* browser.browserAction.onClicked */