在React本机中,当使用Fetch() API时出现"未处理的promise rejection"错误通常是由于未正确处理Fetch请求的返回结果导致的。Fetch() API是一种用于发送网络请求的现代浏览器内置方法,它返回一个Promise对象,可以通过链式调用.then()和.catch()方法来处理请求的成功和失败。
当Fetch请求失败时,即服务器返回一个错误状态码(如404或500),或者网络连接出现问题时,Fetch() API会返回一个rejected状态的Promise对象。如果未正确处理这个rejected状态的Promise对象,就会出现"未处理的promise rejection"错误。
为了解决这个问题,可以在Fetch请求后使用.catch()方法来捕获并处理错误。例如:
fetch('https://api.example.com/data')
.then(response => {
if (!response.ok) {
throw new Error('请求失败');
}
return response.json();
})
.then(data => {
// 处理请求成功的数据
})
.catch(error => {
// 处理请求失败的情况
console.error(error);
});
在上面的代码中,我们在第一个.then()方法中检查了响应的状态码,如果不是200-299范围内的成功状态码,就抛出一个错误。然后在.catch()方法中捕获并处理这个错误。
此外,还可以使用async/await语法来处理Fetch请求,它可以使代码更加简洁和易读。例如:
async function fetchData() {
try {
const response = await fetch('https://api.example.com/data');
if (!response.ok) {
throw new Error('请求失败');
}
const data = await response.json();
// 处理请求成功的数据
} catch (error) {
// 处理请求失败的情况
console.error(error);
}
}
fetchData();
在上面的代码中,我们使用了async函数和await关键字来等待Fetch请求的结果,并使用try/catch语句来捕获和处理错误。
对于React应用中的Fetch请求,如果需要在组件卸载时取消请求,可以使用AbortController来实现。具体的实现方式可以参考以下代码:
import { useEffect, useState } from 'react';
function MyComponent() {
const [data, setData] = useState(null);
useEffect(() => {
const abortController = new AbortController();
fetch('https://api.example.com/data', { signal: abortController.signal })
.then(response => {
if (!response.ok) {
throw new Error('请求失败');
}
return response.json();
})
.then(data => {
setData(data);
})
.catch(error => {
console.error(error);
});
return () => {
abortController.abort(); // 在组件卸载时取消请求
};
}, []);
// 渲染组件
}
在上面的代码中,我们使用了useEffect钩子函数来发送Fetch请求,并在组件卸载时取消请求。通过创建一个AbortController实例,并将其信号(signal)传递给Fetch请求的配置项中,然后在组件卸载时调用abort()方法来取消请求。
总结起来,要解决React本机中Fetch() API失败的"未处理的promise rejection"错误,需要在Fetch请求后使用.catch()方法或使用async/await语法来捕获和处理错误。同时,如果需要在组件卸载时取消请求,可以使用AbortController来实现。
领取专属 10元无门槛券
手把手带您无忧上云