企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持知识库和私有化部署方案 广告
做项目的时候遇到要用同步请求的情况,本来用的是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); } ```