Вызов асинхронной функции и возвращение значения в Javascript - PullRequest
0 голосов
/ 03 октября 2019

У меня есть эта функция 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, но его нет, поскольку оно возвращается до проектафункция выполнена.

...