Promise :then 与 catch 同时触发
Promise :then 与 catch 同时触发
在JavaScript中,Promise的状态一旦改变就不会再变。一个Promise只能从pending状态变为fulfilled(触发then)或rejected(触发catch)状态之一,不能同时触发两者。
然而,在同一个请求中,看到了then和catch都被触发的情况。但实际上,这通常是由于以下原因
同时触发原因
- 代码逻辑错误:可能在then中又抛出了错误,导致后面的catch捕获。
- 多个请求:如果你在多个地方调用了这个函数,那么可能是其中一个请求成功(触发then),另一个失败(触发catch)。
- 响应拦截器:如果你使用了类似axios的拦截器,可能在响应拦截器中进行了错误处理,导致在then中又抛出错误。
解决方案:
1、避免在 then 中处理错误状态
2、确保每个 Promise 都返回结果或抛出错误
3、使用 catch 集中处理错误