У меня есть эта функция Esri API, которую я вызываю в моей функции JavaScript, но поскольку Esri API является асинхронным, он не возвращает правильное значение, мой вопрос заключается в том, должен ли я преобразовать свою функцию в асинхронную? Есть ли какое-либо другое решение для этого?
buildInfoTemplateFromAssignedFields(attributes: any): string {
let content = "<table class='table table-hover'>"
//some code here
let fieldHtml1 = '<tr><td style="width:40%;font-weight:bold;">';
fieldHtml1 += "Address";
fieldHtml1 += '</td><td style="width:60%">';
let fieldContent1 = attributes.entity;
for (let location of fieldContent1["Locations"]) {
//var point = this.convertToXy(location.Longitude, location.Latitude);
let longitude = location.Longitude;
let latitude = location.Latitude;
let wkid = "102100";
var points = [];
var outSR = wkid;
var geometryService = new GeometryService("https://utility.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
var inputpoint = new Point(longitude, latitude);
var params = new ProjectParameters();
params.geometries = [inputpoint];
params.outSR = new SpatialReference({ wkid: outSR });
geometryService.project(params, (result) => {
let outputpoint = result[0];
points.push(this.formatNumber(outputpoint.x));
points.push(this.formatNumber(outputpoint.y));
if (points[0] == this.formatNumber(attributes.extent[0]) && points[1] == this.formatNumber(attributes.extent[1])) {
fieldContent1 = `<div class="mapReadMore">${location.Address}</div>`;
fieldHtml1 += fieldContent1;
fieldHtml1 += '</td></tr>';
//problem is here, the value is not in the final content that this function is returning.
content += fieldHtml1;
}
else {
points = [];
}
})
}
const url = this.getItemUrl(attributes.type, attributes.entity.id, attributes.entity.Type);
content += `<tr><td colspan="2" style="text-align: center"><a onclick="document.dispatchEvent(new CustomEvent('navigateToMapPoint', {detail: '${url}'}))"><button type="button" class="btn btn-primary">View Record</button></a></td><tr></table>`;
return content;
}
Я хочу, чтобы значение content
, которое возвращает функция, имело значение fieldhtml1
, но его нет, поскольку оно возвращается до проектафункция выполнена.