[英]Unexpected undefined return value from a function
我从函数中获得了意外的不确定的返回值。
function createselbox(arr) {
console.log('In createselbox');
var startstr = `Something`;
mytemp = '';
for (var i = 0; i < arr.length; i++) {
mytemp = mytemp + '<option>' + arr[i] + '</option>';
}
var ret = startstr + mytemp + `Something else `;
IsStaff = CheckifStaff();
console.log('Checkifstaff is ' + IsStaff);
if (IsStaff) {
console.log('Got true createselbox');
console.log('In sel loop');
ret = startstr + mytemp + `Something more`;
} else {
console.log('Got false createselbox');
}
return ret;
}
function CheckifStaff() {
var data = {
"isstaff": 'check'
};
data = $(this).serialize() + "&" + $.param(data);
$.ajax({
type: "POST",
dataType: "html",
url: "/functions/checkifstaff",
data: data,
success: function (data) {
var recdata = data;
if (recdata.indexOf('Has add permissions') != -1) {
console.log('Returning true');
return 1;
} else {
console.log('Returning false');
return 0;
}
},
error: function (xhr, textStatus, errorThrown) {
console.log('An error occured in CheckifStaff');
return 0;
}
});
}
控制台显示:
In createselbox
appointment.js ? dev = 96168005 : 292 Checkifstaff is undefined
appointment.js ? dev = 96168005 : 305 Got false createselbox
appointment.js ? dev = 96168005 : 158 Returning true
首先调用createselbox。 但是,显然甚至在函数执行之前,该函数的值也将返回为false。
为什么会这样呢?
CheckifStaff()
没有显式的return
语句,因此它返回默认情况下所有函数返回的内容( undefined
。
为了使这项工作, CheckiStaff
需要返回的东西,在这里,例如CheckiStaff会返回一个承诺,其价值为1个或0。 createselbox
现在将await
CheckiStaff
,然后使用它以后返回值
async function createselbox(arr) { console.log('In createselbox'); var startstr = `Something`; mytemp = ''; for (var i = 0; i < arr.length; i++) { mytemp = mytemp + '<option>' + arr[i] + '</option>'; } var ret = startstr + mytemp + `Something else `; let IsStaff = await CheckiStaff(); console.log('Checkifstaff is ' + IsStaff); if (IsStaff) { console.log('Got true createselbox'); console.log('In sel loop'); ret = startstr + mytemp + `Something more`; } else { console.log('Got false createselbox'); } return ret; } function CheckifStaff() { var data = { "isstaff": 'check' }; data = $(this).serialize() + "&" + $.param(data); return new Promise((resolve, reject) => { $.ajax({ type: "POST", dataType: "html", url: "/functions/checkifstaff", data: data, success: function (data) { var recdata = data; if (recdata.indexOf('Has add permissions') != -1) { console.log('Returning true'); resolve(1); } else { console.log('Returning false'); resolve(0); } }, error: function (xhr, textStatus, errorThrown) { console.log('An error occured in CheckifStaff'); resolve(0); } }); }); }
您也可以将您的ajax更改为这样
$.ajax({
type: "POST",
dataType: "html",
url: "/functions/checkifstaff",
data: data,
success: function (data) {
var recdata = data;
if (recdata.indexOf('Has add permissions') != -1) {
console.log('Returning true');
return 1;
} else {
console.log('Returning false');
return 0;
}
},
error: function (xhr, textStatus, errorThrown) {
console.log('An error occured in CheckifStaff');
return 0;
}
}).then(function(data){
return data
});
我不是专家,但是我认为当您使用Ajax时,您应该等待响应-使用Promise或async / await func
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.