在 Deno 中使用 fetch 函数来发送 HTTP 请求是一个非常方便的方式,但是在实际开发中,我们也需要正确地处理错误以避免不必要的问题。在本文中,我们将讨论如何在 Deno 中正确地处理 fetch 函数的错误。
错误类型
在 Deno 中,fetch 函数返回一个 Promise 对象,它可以被 resolve 成一个 Response 对象。当请求失败时,Promise 将被 reject,这意味着我们可以通过在 catch 块中处理它来处理错误。在处理错误之前,我们需要先了解一下 fetch 函数可能会出现的错误类型。
网络错误
网络错误是最常见的错误类型之一,它们通常是连接错误,DNS 错误或连接超时等问题。在这种情况下,Promise 将会被 reject,并且我们可以使用 catch 块来处理请求失败的情况。
HTTP 错误
HTTP 错误是服务器返回错误状态码时发生的错误。例如,当我们请求一个不存在的页面时,服务器将返回 404 错误。在这种情况下,我们可以通过 Response 对象的 status 属性来查看错误状态码,并确定如何处理响应。
请求被拒绝
有时,某些浏览器扩展程序或安全性设置可能会拒绝我们的请求。在这种情况下,我们也会收到一个错误。如果我们清楚地知道请求被拒绝的原因,那么我们可以采取相应的行动。
处理错误
在使用 fetch 函数时,我们应该始终采用异步函数来处理错误。这样我们就可以使用 try...catch 语句来捕获 Promise 的错误。
// javascriptcn.com 代码示例 async function sendRequest() { try { const response = await fetch("http://example.com"); // 正确处理响应 } catch (error) { console.error("请求失败:", error); // 处理错误 } }
在 catch 块中,我们可以处理任何错误,无论是网络错误,HTTP 错误还是请求被拒绝。具体来说,我们经常需要检查 Response 对象的 status 属性和 ok 属性,以确定响应是否成功。
// javascriptcn.com 代码示例 async function sendRequest() { try { const response = await fetch("http://example.com"); if (response.ok) { // 响应正常,处理数据 } else { // 处理 HTTP 错误 console.error("响应错误:", response.status); } } catch (error) { console.error("请求失败:", error); // 处理网络错误或请求被拒绝 } }
重试
有时候,由于网络问题或服务器问题,请求可能会失败。在这种情况下,我们可以尝试重新发送请求。为此,我们可以编写一个递归函数,并在每次失败时使用 setTimeout 函数来实现延迟重试。
// javascriptcn.com 代码示例 // 定义重试次数和重试间隔时间 const retries = 3; const retryDelay = 1000; async function sendRequest(url, attempt = 1) { try { const response = await fetch(url); if (response.ok) { // 处理响应 return await response.text(); } else { // 处理 HTTP 错误 throw new Error("响应错误:" + response.status); } } catch (error) { console.warn("请求失败:", error.message); // 根据重试次数和重试间隔时间重复尝试 if (attempt < retries) { console.info("正在尝试重新发送请求..."); await wait(retryDelay); return await sendRequest(url, attempt + 1); } else { throw error; } } } function wait(ms) { return new Promise(resolve => setTimeout(resolve, ms)); } // 发送请求 sendRequest("http://example.com") .then(result => console.log(result)) .catch(error => console.error("无法发送请求:", error));
总结
在 Deno 中正确地处理 fetch 函数的错误至关重要。对于网络错误,HTTP 错误和请求被拒绝,我们可以通过 catch 块来捕获错误并采取适当的操作。我们还可以尝试重新发送请求以处理连接不稳定或服务器错误。学会正确地处理 fetch 函数的错误,将使您的代码更加健壮和可靠。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6534922f7d4982a6eb958bba