老师在已经封装好的ajax里面传参的时候已经设置了http状态码异常的reject()了?

老师在已经封装好的ajax里面传参的时候已经设置了http状态码异常的reject()了?

老师在已经封装好的ajax里面传参的时候已经设置了http状态码异常的reject()了?就是下面的代码

const ajax = (url, options) => {
  let xhr;
  const promise = new Promise((resolve, reject) => {
    xhr = new Ajax(url, {
      ...options,
      ...{
      // 这里有判断http状态码,成功的话才会resolve
        success(response) {
          resolve(response);
        },
        httpCodeError(status) {
          reject({
            type: ERROR_HTTP_CODE,
            text: `${ERROR_HTTP_CODE_TEXT}:${status}`
          });
        },
        error() {
          reject({
            type: ERROR_NETWORK,
            text: ERROR_NETWORK_TEXT
          });
        },
        abort() {
          reject({
            type: ERROR_ABORT,
            text: ERROR_ABORT_TEXT
          });
        },
        timeout() {
          reject({
            type: ERROR_TIMEOUT,
            text: ERROR_TIMEOUT_TEXT
          });
        }
      }
    }).getXHR();
  });

  promise.xhr = xhr;
  promise.ERROR_HTTP_CODE = ERROR_HTTP_CODE;
  promise.ERROR_NETWORK = ERROR_NETWORK;
  promise.ERROR_TIMEOUT = ERROR_TIMEOUT;
  promise.ERROR_ABORT = ERROR_ABORT;

  return promise;
};

为什么用的时候还要再判断一遍状态码?

const getData = (url, options) => {
  return getJSON(url, {
    timeoutTime: TIMEOUT,
    ...options
  })
    .then(response => {
      // {
      //     code: 200,
      //     data: []
      // }
      if (response.code !== SUCC_CODE)
        throw new Error(`出错了:${response.code}`);

      return response.data;
    })
    .catch(err => {
      console.log(err);
    });
};


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

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕星星 2022-06-08 17:35:32

同学你好,这两个状态码判断范围不一样。

ajax文件中判断的状态码范围在[200,300)之间以及是否为304,不满足的话会报状态码的错误

https://img1.sycdn.imooc.com//climg/62a06cd409380dec08200738.jpg

而getData.js文件中判断的状态码是否为200

https://img1.sycdn.imooc.com//climg/62a06d2d0978ddc504660040.jpg

https://img1.sycdn.imooc.com//climg/62a06d5909a6953e07230343.jpg

也就是说如果返回的数据中code为304,这里就会报304的错误。

祝学习愉快!

  • 提问者 WYW265672 #1

    code304不是表示缓存没过期吗,这不是错误把,这里报错合理吗

    2022-06-08 17:58:37
  • 好帮手慕星星 回复 提问者 WYW265672 #2

    你好,非常抱歉,是老师回答错误了。

    这里是http的状态码

    https://img1.sycdn.imooc.com//climg/62a07637091c0bcb08190123.jpg

    这里是返回数据的code值,不是状态码,是和后端约定好的,可以是200,也可以是其他值

    https://img1.sycdn.imooc.com//climg/62a0762209d9478305350067.jpg

    所以这两部分值没有关系。

    2022-06-08 18:15:05
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师