一.后端服务挂掉,前端跑请求
1拦截器走reject

2接口会走.catch

3浏览器的状态响应码为500

二.后端服务正常运行,但是不存在这个接口,前端跑请求
1拦截器走reject

2接口会走.catch

3浏览器的状态响应码为404

三.一切正常,但是后端没给响应
1拦截器走reject

2接口会走.catch

3.前端这边会显示超时
四.总结只要后端给了响应,就不会由浏览器给那些状态码.那么前端的请求也不会走.catch(后端自定义状态码除外)
五.后端服务器正常开启,但是数据库服务挂掉
1前端代码

2.后端通过catch捕捉错误后会正常返回

3.因为后端有返回,所以前端走.then而不会走.catch。除非后端自定义浏览器系统响应码。
六.要分清后端给的响应码还是浏览器给的响应码
七.后端也可以自定义响应码
1nodejs作为后端怎么自定义呢

2.前端这边,虽然后端有正常返回,但是因为后端自定义了浏览器返回码,所以前端这边依然走.catch

3.通过代码可以看到后端自定义的是600,浏览器这边实际系统响应码也是600

七、可以分析出,尽管后端正常返回,但是如果自定义的状态码不对的话,前端也会走.catch。
因为后端有catch,一般来说都能正常返回.所以后端和前端一定要先协商好状态码。
八、200-300的状态码都可以走.then。那么我们可以采用以下两种方式进行返回
第一种:后端以.catch捕捉错误,不管后端写入数据是否成功,始终以200的状态码正常返回给前端。这样一来,前端就可以这样判断。分两类,第一类前端这边ajax请求走.catch,那么必然是后端服务挂掉或者网络问题等;第二类,前端走了.then,这样也不一样就是成功(可能后端.catch捕捉了错误正常返回的),那么在.then中需要判断.我写了一个例子如下:

第二种:后端只能成功获取到了数据才能以200的状态码返回;;;;后端只要.catch了(若数据库查询错误等)都不以200返回了,
返回的状态码一定要让前端走.catch。
这样一来前端这边只有两种情况,第一种.then就代表绝对成功,第二种.catch不成功(要么网络错误,那么后端查询错误)。
网友评论