Преобразуйте обещание / ajax в синхронный запрос - PullRequest
0 голосов
/ 21 января 2020

У меня следующая ситуация:

У меня есть код, работающий на локальном сервере (требуется только поддержка Chrome). Этот код в настоящее время выполняется асинхронно, как и из учебника. Однако для моего варианта использования было бы намного проще синхронно запускать код.

function creosonConnect() {

    // JSON request
    var reqObj =  {
        "command": "connection",
        "function": "connect"
    };

    // perform the request
    creosonRequest(reqObj)
        .then(function(respObj) {

            console.log('got this back: '+JSON.stringify(respObj));
            console.log('SESSIONID ===> '+respObj.sessionId);
            creosonSessionId = respObj.sessionId;
        });
}

function creosonRequest (dataObj) {

    return new Promise(function(resolve, reject) {

        creosonServerSettingsObj.data = JSON.stringify(dataObj);

        $.ajax(
            creosonServerSettingsObj
        )
            .success(function (data) {
                console.log('got to the success : '+JSON.stringify(data))
                console.log('got this data type back: '+typeof data);

                if (data.status.error) {
                    if (data.status.hasOwnProperty('message')) {
                        reject(data.status.message);
                    } else {
                        console.log(JSON.stringify(data));
                        reject('creoson Operation failed! - check console for details');
                    }
                } else {
                    resolve(data);
                }
            })
            .error( function (e) {
                console.log('got an error : '+JSON.stringify(e));
                reject('creoson Operation failed! - check console for details');
            });
    })
}

Моя проблема в том, что у меня нулевой опыт работы с серверами / веб-разработкой в ​​целом. Если я попытаюсь связать несколько функций, которые зависят от завершения первой (creosonConnect), все это рухнет вокруг меня. В идеале я хотел бы сделать что-то вроде этого:

function main(){

    creosonConnect();
    creoOpenModel();
    ...
}

function creoOpenModel (partName) {

    // JSON request
    var reqObj =  {
        "sessionId": creosonSessionId,
        "command": "file",
        "function": "open",
        "data": {
            "file": null,
            "display": true,
            "activate": true
        }
    };

    // get the input value & set to the reqObj
    var fileName = partName
    reqObj.data.file = fileName;

    // perform the request
    creosonRequest(reqObj)
        .then(function(respObj) {

            console.log('got this back: ' + JSON.stringify(respObj));
        });
}

Любая помощь, как преобразовать это в синхронный код, очень ценится. Также некоторым объяснением, что именно происходит в функции creosonRequest, было бы fantasti c.

Я знаю, что это очень много вопросов, но я действительно в недоумении. Большое спасибо заранее !!

1 Ответ

0 голосов
/ 21 января 2020

Вы можете попробовать что-то сделать с помощью async / await и подождать, пока ваша функция соединения завершится sh.

Вы пробовали что-то вроде:

async function main(){

   await creosonConnect();
   creoOpenModel();
   ...
}
...