我正在做一个对服务器进行同步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”的值总是未定义。
有人能解释我怎么做吗?
谢谢。我赞成它。
答案 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();