fetch用法

147 阅读3分钟

引言

JavaScript提供了一个现代化的API,即fetch方法。fetch方法提供了一种更简单和灵活的方式来进行HTTP请求,并返回一个Promise对象,以便处理响应数据。

基本语法

fetch(url[, options])
.then(response => {
 // 处理响应
})
.catch(error => {
 // 处理错误
});

url:表示要请求的URL地址。 options(可选):一个配置对象,用于设置请求的选项,例如请求的方法、请求头、请求体等。 fetch函数会返回一个Promise对象,可以使用.then()方法来处理成功的响应,使用.catch()方法来处理错误。在成功的回调函数中,可以对响应进行处理、解析数据等操作。在错误的回调函数中,可以进行错误处理或者进行错误提示。

使用案例

  • Get请求
fetch('https://api.example.com/data')
  .then(response => {
    if (response.ok) {
      return response.json();
    }
    throw new Error('Network response was not ok.');
  })
  .then(data => {
    // 处理获取到的数据
    console.log(data);
  })
  .catch(error => {
    // 处理错误
    console.error('Error:', error);
  });

在上述代码中,我们使用fetch函数发送一个GET请求到指定的URL地址。在第一个.then()回调函数中,我们检查response对象的ok属性来判断请求是否成功。如果成功,我们使用.json()方法将响应体解析为JSON格式,并返回一个新的Promise对象。在第二个.then()回调函数中,我们可以处理获取到的数据。在.catch()回调函数中,我们处理任何发生的错误。

  • POST请求 除了发送GET请求,fetch函数还可以发送其他HTTP请求,例如POST、PUT、DELETE等。可以通过options参数来指定请求的方法、请求头、请求体等信息。以下是一个发送POST请求的示例
const requestOptions = {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({ name: 'John', age: 30 })
};
 
fetch('https://api.example.com/users', requestOptions)
  .then(response => {
    if (response.ok) {
      return response.json();
    }
    throw new Error('Network response was not ok.');
  })
  .then(data => {
    // 处理获取到的数据
    console.log(data);
  })
  .catch(error => {
    // 处理错误
    console.error('Error:', error);
  });

处理响应

在成功的回调函数中,可以对响应进行处理和解析数据。fetch方法返回的响应对象包含了各种方法和属性,例如json()、text()、blob()等,用于获取不同类型的响应数据。

json()方法:将响应体解析为JSON格式,并返回一个Promise对象,可以使用.then()方法获取解析后的数据。 text()方法:将响应体解析为纯文本,并返回一个Promise对象。 blob()方法:将响应体解析为二进制数据,并返回一个Promise对象。 以下是一个示例,演示如何处理不同类型的响应数据

fetch('https://api.example.com/data')
  .then(response => {
    if (response.ok) {
      return response.json();
    }
    throw new Error('Network response was not ok.');
  })
  .then(data => {
    // 处理获取到的JSON数据
    console.log(data);
  })
  .catch(error => {
    // 处理错误
    console.error('Error:', error);
  });

超时处理

const controller = new AbortController();
const timeout = setTimeout(() => {
  controller.abort();
}, 5000); // 设置超时时间为5秒
 
fetch('https://api.example.com/data', { signal: controller.signal })
  .then(response => {
    if (response.ok) {
      return response.json();
    }
    throw new Error('Network response was not ok.');
  })
  .then(data => {
    // 处理获取到的数据
    console.log(data);
  })
  .catch(error => {
    // 处理错误
    console.error('Error:', error);
  })
  .finally(() => {
    clearTimeout(timeout); // 清除超时计时器
  });

参考链接

深入理解fetch