等待javascript函数返回

时间:2018-04-30 12:38:11

标签: javascript ajax synchronization return

我正在做一个对服务器进行同步ajax调用的函数。 问题是,当我调用该函数时,main不会等待数据传播。

我更好地解释自己:

我需要从函数中返回一些数据:

var firstdate = getLastPaycheck();

这个功能是:

function getLastPaycheck() {
    let returnValue  = sessionStorage.getItem('last_paycheck');

    if (returnValue == "" || returnValue == null) {
        const message = { "cookie": getCookie("userCookie") };
        var xhr = new XMLHttpRequest();
        xhr.addEventListener('load', complete, false);
        xhr.open("POST", '/getLastPaycheck', false);
        xhr.setRequestHeader("Content-type", "application/json");
        xhr.send(JSON.stringify(message));

        function complete(e) {//Call a function when the state changes.
                const response = JSON.parse(xhr.responseText);
                console.log("Value taken from the server");
                returnValue = moment(response.value[0].last_paycheck).format(getDateFormat("iso"));
                return returnValue;
            console.log("Returned value");
            } // if readyStatus = 200;

    } else {
        console.log("Value taken from the session");
        return returnValue;
    }
}

问题是当从服务器获取数据时,“firstdate”的值总是未定义。

有人能解释我怎么做吗?

谢谢。我赞成它。

2 个答案:

答案 0 :(得分:2)

您也可以使用回调来执行此操作:

    function getLastPaycheck(callback) {
        let returnValue  = sessionStorage.getItem('last_paycheck');

        if (returnValue == "" || returnValue == null) {
            const message = { "cookie": getCookie("userCookie") };
            var xhr = new XMLHttpRequest();
            xhr.addEventListener('load', complete, false);
            xhr.open("POST", '/getLastPaycheck', false);
            xhr.setRequestHeader("Content-type", "application/json");
            xhr.send(JSON.stringify(message));

            function complete(e) {//Call a function when the state changes.
                    const response = JSON.parse(xhr.responseText);
                    console.log("Value taken from the server");
                    returnValue = moment(response.value[0].last_paycheck).format(getDateFormat("iso"));
                    callback(returnValue);
                console.log("Returned value");
                } // if readyStatus = 200;

        } else {
            console.log("Value taken from the session");
            callback(returnValue);
        }
    }

    getLastPaycheck(function(data) {
      // data is accessible here
    });

答案 1 :(得分:1)

您可以使用ES6 async-await,然后只需致电

var firstdate = await getLastPaycheck();