веб-сайт не ожидает результата синхронизации веб-службы - PullRequest
1 голос
/ 27 сентября 2019

Я вызываю веб-службы синхронизации на своем веб-сайте, но их результаты не ожидаются.

Я вызываю функцию loadExtLayout в функции loadLayout, после чего вызываю функцию loadLayout вдругие функции на сайте

    HTTPRequestService.prototype.loadExtLayout = function(pathToLoad){
        logManager.IHM_LOG_INFO("BEGIN HTTPRequestService loadExtLayout call pathToLoad="+JSON.stringify(pathToLoad));
        var loadResult = null;
        $.ajax({
            async:false,
            method: "GET",
            url: pathToLoad
        }).done(function(result){
                loadResult = result;
            }).fail(function(jqXHR, textStatus){
                loadResult = null;
                logManager.IHM_LOG_ERROR(new Error().stack+": "+"Error loading layout : " + pathToLoad + " (" + textStatus + ")\n");
               });
        logManager.IHM_LOG_INFO("END HTTPRequestService loadExtLayout call");
        return loadResult;
    }


GenericLayoutController.prototype.loadLayout = function(layoutName){
    logManager.IHM_LOG_INFO("BEGIN loadLayout");
    var loadResult = false;
    var layoutContent = null;
    try {
        var httpService = new HTTPRequestService(this.AppId);
        if(httpService != null){

            layoutContent = httpService.loadExtLayout(layoutName);
            console.log("layoutContent :" + layoutContent); 
            if ((layoutContent != null) && ($("#window_"+ this.AppId + "_" + this.WndId).attr("patternname") == this.patternName)) {
                $("#window_"+ this.AppId + "_" + this.WndId).empty();
                $("#window_"+ this.AppId + "_" + this.WndId).html(layoutContent);
                loadResult = true;
            } else if( layoutContent == null ){
                logManager.IHM_LOG_ERROR("Error loading layout !");
            }
        } else {
            logManager.IHM_LOG_ERROR("Error unable to create HTTPRequestService object : httpService is null !");
        }
    } catch(e) {
        loadResult = false;
        logManager.IHM_LOG_ERROR(new Error().stack+": "+e+"\n");
    }
    logManager.IHM_LOG_INFO("END loadLayout");
    return loadResult;
}


1 Ответ

1 голос
/ 27 сентября 2019

Если вы используете ajax-параметр «async: false», вы должны использовать callback (success) вместо обещаний, потому что «then» работает асинхронно и «return» выполняется до того, как обещание получает данные с сервера.

let data = null;
$.ajax({
   async:false,
   method: "GET",
   url: pathToLoad,
   success:(response)=>{data = response}
}); 
return data;

или вы можете сделать это асинхронно

HTTPRequestService.prototype.loadExtLayout = function(pathToLoad){
    logManager.IHM_LOG_INFO("BEGIN HTTPRequestService loadExtLayout call pathToLoad="+JSON.stringify(pathToLoad));

    let loadResult = new Promise((resolve,reject)=>{
        $.ajax({
            async:false,
            method: "GET",
            url: pathToLoad
        }).done(function(result){
                resolve(result);
            }).fail(function(jqXHR, textStatus){
                reject(textStatus);
                loadResult = null;
                logManager.IHM_LOG_ERROR(new Error().stack+": "+"Error loading layout : " + pathToLoad + " (" + textStatus + ")\n");
               });
    });
    logManager.IHM_LOG_INFO("END HTTPRequestService loadExtLayout call");
    return loadResult;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...