如何为返回axios.request的函数封装Promise,仅在特定条件下resolve
实现带条件resolve的Promise包装axios请求
方法一:外层嵌套新Promise
直接在外层创建新Promise,完全掌控resolve和reject的触发时机:
function myFn() { return new Promise((resolve, reject) => { axios.request({ /* 填入你的请求配置,比如url、method等 */ }) .then(response => { // 请求成功后判断返回的状态值 if (response.data.status === "somevalue") { resolve(response.data); // 满足条件时resolve,可按需传递数据 } else { // 状态不符时触发reject,自定义错误信息 reject(new Error(`返回状态不符合预期,当前状态: ${response.data.status}`)); } }) .catch(requestError => { // 捕获axios请求本身的错误(如网络异常、HTTP错误码等) reject(requestError); }); }); }
方法二:利用Promise链式调用简化写法
无需额外嵌套Promise,直接在axios返回的Promise链中做判断:
function myFn() { return axios.request({ /* 你的请求配置 */ }) .then(response => { if (response.data.status === "somevalue") { return response.data; // 满足条件时返回数据,会传递给后续的then } else { // 状态不符时抛出错误,会进入后续的catch分支 throw new Error(`状态不符合预期: ${response.data.status}`); } }); }
使用方式
两种方法的调用逻辑完全一致:
myFn() .then(validData => { // 只有当返回状态为"somevalue"时才会进入这里 console.log("处理符合条件的数据:", validData); }) .catch(error => { // 处理请求失败或状态不符的情况 console.error("出错了:", error.message); });
内容的提问来源于stack exchange,提问作者Aman
相关产品推荐
相关产品推荐

