JavaScriptasync/await编写异步

一赫技术 2024-03-07 22:12:51

JavaScript 是一种异步的、事件驱动的语言,这在处理诸如网络请求、文件操作或定时任务等操作时非常有用。传统上,JavaScript 使用回调函数来处理异步操作,但这可能会导致所谓的“回调地狱”。ES6 引入了 Promises 来帮助解决这个问题,而 ES2017 则引入了 async/await,进一步简化了异步编程。

Async/await 是基于 Promises 的,它允许我们以同步的方式编写异步代码,使得代码更加清晰易懂。下面,我们将通过几个例子来演示如何在实际中使用 async/await。

示例1:异步加载图片

在这个例子中,我们将使用 async/await 来异步加载一张图片,并将其显示在页面上。

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>Async/Await 示例:异步加载图片</title></head><body> <button id="loadImageButton">加载图片</button> <div id="imageContainer"></div> <script> async function loadImage(url) { return new Promise((resolve, reject) => { const image = new Image(); image.onload = () => resolve(image); image.onerror = () => reject(new Error('图片加载失败')); image.src = url; }); } document.getElementById('loadImageButton').addEventListener('click', async function() { try { const image = await loadImage('https://via.placeholder.com/150'); document.getElementById('imageContainer').appendChild(image); } catch (error) { console.error(error); } }); </script></body></html>

在这个例子中,loadImage 函数返回一个 Promise 对象,我们通过 async 关键字声明了一个异步函数,并在事件监听器中使用 await 关键字等待图片加载完成。

示例2:异步获取数据

在这个例子中,我们将使用 async/await 来异步获取网络数据,并在页面上显示。

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>Async/Await 示例:异步获取数据</title></head><body> <button id="fetchDataButton">获取数据</button> <pre id="dataContainer"></pre> <script> async function fetchData(url) { const response = await fetch(url); if (!response.ok) { throw new Error('网络请求失败'); } return response.json(); } document.getElementById('fetchDataButton').addEventListener('click', async function() { try { const data = await fetchData('https://mock.apifox.com/m1/2209590-0-default/pet/findByStatus'); document.getElementById('dataContainer').textContent = JSON.stringify(data, null, 2); } catch (error) { console.error(error); } }); </script></body></html>

在这个例子中,fetchData 函数中使用 await 关键字等待 fetch API 的响应,并处理成功和失败的情况。

示例3:使用 Async/Await 进行错误处理

Async/await 使得异步代码的错误处理变得更加直观。我们可以使用传统的 try/catch 语句来捕获和处理错误。

<!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>Async/Await 示例:错误处理</title></head><body> <button id="errorHandlingButton">执行操作</button> <div id="resultContainer"></div> <script> async function riskyOperation() { throw new Error('出错了!'); } document.getElementById('errorHandlingButton').addEventListener('click', async function() { try { await riskyOperation(); document.getElementById('resultContainer').textContent = '操作成功'; } catch (error) { document.getElementById('resultContainer').textContent = error.message; } }); </script></body></html>

在这个例子中,我们故意在 riskyOperation 函数中抛出一个错误,然后在事件监听器中使用 try/catch 来捕获这个错误。

结论

Async/await 提供了一种更加直观和简洁的方式来处理 JavaScript 中的异步操作。通过这些例子,我们可以看到它如何帮助我们以更加同步的方式编写异步代码,同时保持代码的可读性和可维护性。随着 JavaScript 语言的不断发展,我们期待未来会有更多的新特性来进一步简化异步编程。

0 阅读:0

一赫技术

简介:感谢大家的关注