请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

老师, fetch可以在解析httpstatus的同时得到body吗

您这个例子和官方的是差不多的

function checkStatus(response) {
  if (response.status >= 200 && response.status < 300) {
    return response
  } else {
    var error = new Error(response.statusText)
    error.response = response
    throw error
  }
}
 
function parseJSON(response) {
  return response.json()
}
 
fetch('/users')
  .then(checkStatus)
  .then(parseJSON)
  .then(function(data) {
    console.log('request succeeded with JSON response', data)
  }).catch(function(error) {
    console.log('request failed', error)
  })


我希望当http code为400的时候, 得到相应的json数据, 展示给开发人员, 因为400这种错误就是传参不对导致的, 我返回的例子是: 

{

code: -1,

msg: '密码不能为空',

data: null

}


{

code: -2,

msg: '性别编码不是系统定义的',

data: null

}


当200的时候

{

code: 0

msg: 'ok',

data: {createdUser: {id...name....}}

}


{

code: 20

msg: '系统已存在该用户不能注册',

data: null

}


总之, 400的时候一般是开发人员不按照接口文档开发造成的错误, 让他自己解决, 不要打扰后端程序员,  200代表接口调用成功, 但是业务有可能错误的

他这2个then能不能合并成一个啊, 要不没法解决我的问题, 因为执行第一个then的时候我要调用第二个then中的数据

正在回答 回答被采纳积分+3

2回答

提问者 慕哥8298992 2017-05-24 16:57:21

老师, 我不太明白你说的啊, 

我服务器端这边是springboot开发的, 统一异常处理针对客户端传递参数错误设定的规则是: 返回400, 然后json中有具体的错误信息, 我如果通过fetch读取呢?

then(response => 在这里判断如果是400, 那么读取json中的msg属性然后终止then, 弹出对话框展示json.msg

then(response => response.json)

then.....

0 回复 有任何疑惑可以回复我~
  • Parry #1
    最后一个 then 里就可以直接读取 json 属性啊,你的情况是读取不到?
    回复 有任何疑惑可以回复我~ 2017-05-24 23:45:17
Parry 2017-05-24 16:18:08

400 是页面找不到,还怎么返回啊?也就是说用户页面输入错误了你要告诉用户不对?

这个在接口后面写个 url 重写,然后返回就可以了。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕哥8298992 #1
    老师你太让我失望了,  https://css-tricks.com/using-fetch/  我解决了
    回复 有任何疑惑可以回复我~ 2017-05-25 22:19:54
  • Parry 回复 提问者 慕哥8298992 #2
    你贴给我的源码不是已经做错误处理了吗?我以为你说的是其他情况的处理啊。
    回复 有任何疑惑可以回复我~ 2017-05-26 05:19:08
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信