jQuery和axios的同步请求
11/20/2025, 2:52:48 PM
#jQuery#历史文章迁移
做项目的时候遇到要用同步请求的情况,本来用的是jQuery封装好的同步请求,简单易懂易操作,如下:
funAndState (node) {
let obj = {
functions: [],
status: []
};
$.ajax({
url: '', // 请求路径
type: "post" ,
data: {nodeId: node},
async: false, // false为同步
success: function(res){
obj.functions = res.data.functions;
obj.status = res.data.status;
}
});
return obj;
}
但是要求是统一用axios请求,方便做拦截处理,所以使用方法就变成了下面这种:
async funAndState (node,callback) {
let obj = {
functions: [],
status: []
};
await axios.post('url',{nodeId: node}).then(res => {
obj.functions = res.data.data.functions;
obj.status = res.data.data.status;
callback(obj);
});
}
和jQuery相比,async + await 可以把异步请求变成同步,await必须搭配async使用。(据我的不严谨判断,await好像不能放在map等这类的表达式里,也不能放在其他异步比如this.setState里面)。另外,axios同步请求是不能直接和jQuery一样return出去的,不然return的永远是一个promise对象。所以要用callback回调函数来获取你要的返回值,使用如下(async + await一样是要的):
async submit () {
let funAndState;
await this.funAndState("01", function callback(res) {
funAndState = res;
});
console.log(funAndState);
}