fetch发送网络请求

-

fetch文档:https://github.github.io/fetch/

axios和jquery都是基于原生的XMLHttpRequest对象封装的,

除了这个原生对象以外,还有fetch函数也可以请求网络数据

search = async () => {
    // 获取用户输入
    const { value: keyWord } = this.keyWordElement;
    // 消息发布
    // 发送请求前通知List更新状态
    PubSub.publish('updateListState', { isFirst: false, isLoading: true, err: '' })
    // #region---使用axios发送请求
    // 获取网络请求
    // axios.get(`https://api.github.com/search/users?q=${keyWord}`).then(
    //   res => {
    //     PubSub.publish('updateListState', { users: res.data.items, isLoading: false  })
    //   },
    //   err => {
    //     // 请求失败后通知List更新错误信息状态
    //     PubSub.publish('updateListState', { err: err.message, isLoading: false })
    //   }
    // )
    // //#endregion

    // 使用fetch发送请求(未优化)
    // fetch是关注分离的的,先关注连接状态,再拿到结果
    fetch(`https://api.github.com/search/users?q=${keyWord}`, {}).then(
      res => {
        console.log(res, '联系服务器成功了');
        return res.json(); // res.json方法返回一个promise对象
      },
      // err => {
      //   console.log(err, '联系服务器失败了');
      //   // return new Promise(() => {}); // 返回一个新的promise对象,就不会继续往下走了(不会进入下面的.then)
      //   return Promise.reject(err); // 把错误信息传到下面的.then的失败回调
      // }
    ).then(
      res => {
        console.log(res, '拿到数据');
      },
      err => {
        console.log(err, '拿到数据失败');
      }
    )

    // 使用fetch发送请求(未优化)
    try {
      const res = await fetch(`https://api.github.com/search/users?q=${keyWord}`);
      const result = await res.json();
      console.log(result, 'result');
      PubSub.publish('updateListState', { users: result.items, isLoading: false  });
    } catch (error) {
      console.log(error, '请求出错');
      PubSub.publish('updateListState', { err: error.message, isLoading: false })
    }
    
  }

 

 

 

 

 

 

-

posted @ 2022-10-05 22:37  古墩古墩  Views(142)  Comments(0Edit  收藏  举报