如何从另一个文件的React axios函数中获取请求返回值?
解决方法
你现在的问题是newAppartement函数没有返回axios生成的Promise实例,导致外部调用时无法拿到异步请求的响应结果,按下面两步修改即可:
1. 修改data.js代码
给newAppartement函数加上return,把axios的Promise实例返回给调用方:
export function newAppartement(newAppartementTableau) { // 新增return,返回axios的Promise对象 return axios({ method: "post", url: urlAxiosAppartement, timeout: 1000 * 5, headers: { "Content-Type": "application/json", Authorization: "Bearer " + "****" }, data: { fields: { nom: newAppartementTableau.nom } } }) .then((response) => { return response; }) .catch((err) => { // 也可以选择在这里做全局错误处理后再抛出错误 return Promise.reject(err); }); }
2. 修改form.js代码
异步请求的结果不能同步获取,推荐用async/await语法接收响应:
// 给handleSubmit方法添加async标识 async handleSubmit(event, user,props) { event.preventDefault(); const nomAppartement = event.target.nomAppartement.value; const superficieAppartement = event.target.superficieAppartement.value; const newAppartementTableau = { nom: nomAppartement, }; try { // await等待异步请求完成,拿到响应结果 const messageRequest = await newAppartement(newAppartementTableau); // 此处可以正常使用messageRequest的响应内容 console.log('请求成功', messageRequest); } catch (err) { // 捕获请求异常做对应处理 console.error('请求失败', err); } }
如果你习惯用Promise的then链式调用,也可以用下面的写法:
handleSubmit(event, user,props) { event.preventDefault(); const nomAppartement = event.target.nomAppartement.value; const superficieAppartement = event.target.superficieAppartement.value; const newAppartementTableau = { nom: nomAppartement, }; newAppartement(newAppartementTableau) .then(messageRequest => { // 拿到响应结果使用 console.log('请求成功', messageRequest); }) .catch(err => { console.error('请求失败', err); }) }
内容的提问来源于stack exchange,提问作者cecilecemoi
相关产品推荐
相关产品推荐

