post请求同步异步的各种问题

2023-12-13 12:14:14

?以下是能正常获取值再往下走的案例:loadCalender方法能正常获取holidays之后再执行其他

 async function loadDateNoteData() {
	try {
		let res = await $.post('/query',  {yearMonth : '2023-12'}); //await在这里等待post请求完成
		if(res.code == 0){
			return res.data; 
		} else {
			layer.msg('获取失败!', {icon: 5});
			return [];
		}
	} catch (error) {
		console.error('获取异常: ', error);
		return [];
	}
}

function loadCalender(elem) {
	loadDateNoteData().then((res) => { // 返回值res就是 后台获取到的休息日
		holidays = res
		//.....加载其他
	}).catch((error) => {
		layer.msg('加载异常:'+ error, {icon: 5});
	});
}


以下的post请求方法执行后holidays会因为post请求异步的问题还没返回就已经执行到下面的逻辑去了,因此holidays永远都没值

async function loadDateNoteData() {
	 $.post('/query', {yearMonth : '2023-12'}, function(res) {
		if(res.code == 0){
			return res.data; 
		} else {
			layer.msg('获取失败!', {icon: 5});
			return [];
		}
	});
}

function loadCalender(elem) {
	loadDateNoteData().then((res) => { // 返回值res会直接是undefined,即时给了then等待返回再执行下面的依旧如此,因为loadDateNoteData的post请求是异步的,因此还没执行完就已经返回了
		holidays = res
		//.....加载其他
	}).catch((error) => {
		layer.msg('加载异常:'+ error, {icon: 5});
	});
}

在JavaScript中,await关键字是在ES2017(也称为ES8)版本中正式引入的。这个版本引入了async/await语法,用于简化异步操作的处理。async关键字用于声明一个函数是异步函数,而await关键字则用于等待一个Promise对象的解决,只能在异步函数中使用。因此,只有在ES2017或更高版本的JavaScript环境中,你才能使用await关键字。【我的js是3.5版本】

文章来源:https://blog.csdn.net/qq3892997/article/details/134826069
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。