共计 3885 个字符,预计需要花费 10 分钟才能阅读完成。
微信搜寻【大迁世界】, 我会第一工夫和你分享前端行业趋势,学习路径等等。
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。
快来收费体验 ChatGpt plus 版本的,咱们出的钱
体验地址:https://chat.waixingyun.cn/#/home
能够退出网站底部技术群,一起找 bug.
这篇文章介绍了应用 async/await
编写异步代码的 5 个最佳实际。文章中的第一个倡议是在所有异步代码中应用 async/await
。这样做的益处有以下几点:首先,它使代码库放弃一致性。通过在所有异步代码中应用 async/await
,你能够保持一致的代码编写和组织形式。此外,async/await
有助于进步代码可读性和易于保护。这是因为应用 async/await
能够使代码看起来更像同步代码,从而使其更容易了解和批改。总之,应用 async/await 是编写高效、易于保护的异步代码的要害。
上面是注释:
在这篇博客文章中,咱们将探讨async/await
– 一种在各种编程语言中编写异步代码的弱小工具。
但首先,让咱们定义 async/await
。简略来说,async/await
是一种编写异步代码的形式,它看起来和行为像同步代码。它容许咱们暂停函数的执行,期待 promise 解决,而后从来到的中央持续。
疾速示例:
async function getData() {const response = await fetch('https://example.com/data');
const data = await response.json();
return data;
}
留神 fetch
和 response.json
的调用被包裹在 await
语句中。这使得函数在继续执行下一行之前暂停并期待 Promise
解决。
为什么 async/await 很重要
异步编程在当今高并发应用程序的世界中是必不可少的。无论是构建 Web 应用程序、挪动应用程序还是后端服务,都有可能须要在某个时候应用 async/await
。
改良的性能和可扩展性
async/await
容许咱们编写非阻塞代码,这意味着应用程序能够解决更多并发申请,而不会遇到性能瓶颈。
加强用户体验
async/await
能够帮忙咱们创立更具响应性和交互性的应用程序,从而带来更好的用户体验。
更好的代码构造和可读性
async/await
使编写洁净有组织的代码更加容易,这在应用程序规模和复杂性减少时尤为重要。
进步生产力
通过简化异步编程,async/await
能够帮忙咱们在更短的工夫内实现更多的工作。
Tips1: 对于所有异步代码,请应用 async/await
应用 async/await
解决所有异步代码是个好主见,起因有几个。首先,它能够促成代码库的一致性。通过应用 async/await
解决所有异步代码,咱们将领有一种统一的编写和组织代码的形式。这使得其余开发人员更容易了解和保护你的代码库。
async/await
还能够应用 try/catch
块轻松捕捉和处理错误。在解决 Promise 时,这尤其有用,因为如果没有适当的错误处理,Promise 可能很难调试。
最初,应用 async/await
在某些状况下能够进步性能,特地是与 await
关键字联合应用时。
以下是应用 async/await
解决所有异步代码的几个示例:
// Example 1: Using async/await with promises
async function getData() {
try {const response = await fetch('https://example.com/data');
const data = await response.json();
return data;
} catch (error) {console.error(error);
}
}
// Example 2: Using async/await with async/await functions
async function processData(data) {
try {const processedData = await transformData(data);
await saveData(processedData);
} catch (error) {console.error(error);
}
}
Tips2: 在 try/catch 块中应用 await 处理错误
处理错误是编写牢靠且易于保护的代码的重要局部。在应用 async/await
时,最好在 try/catch
块内应用 await
关键字来正确处理错误。
上面是在 try/catch
块中应用 await 的示例:
async function getData() {
try {const response = await fetch('https://example.com/data');
const data = await response.json();
return data;
} catch (error) {console.error(error);
}
}
在这个例子中,fetch
和 response.json
的调用被蕴含在 await
语句中,位于 try
块内。如果产生谬误,它将被 catch
块捕捉并记录到控制台。
在 async/await
代码中,应用 try/catch
块内的 await
是处理错误的简略无效办法。
Tips3: 防止在 async/await 中应用 .then() 和 .catch()
JavaScript 中通常应用 .then()
和 .catch()
办法来解决 Promise。然而,当应用 async/await
时,通常最好防止应用 .then()
和 .catch()
,而是应用 try/catch
块。
这是一个应用 try/catch
块而不是 .then()
和 .catch()
的示例:
async function getData() {
try {const response = await fetch('https://example.com/data');
const data = await response.json();
return data;
} catch (error) {console.error(error);
}
}
Tips4: 防止应用 async void 函数,除了事件处理程序。
Async void 函数是应用 async
关键字标记的函数。尽管在某些状况下能够应用异步无返回值函数,但通常应防止应用。示例:
async void DoWork() {// Async code here}
async void 函数可能会有问题,因为它们不返回值,这使得处理错误和确定函数何时实现变得艰难。
通常最好应用 async Task
或 async Task<T>
函数。这些类型的函数容许咱们返回值并更轻松地处理错误。
这是一个异步工作函数的示例:
async Task DoWork() {// Async code here}
有一种状况能够应用 async void
函数:事件处理程序。async void
事件处理程序通常用于 UI 编程,以执行异步操作而不阻塞 UI 线程。
这是一个 async void
事件处理程序的示例:
private async void Button_Click(object sender, RoutedEventArgs e) {// Async code here}
Tips5: 不要在没有适当思考的状况下混合应用同步和异步代码
混合同步和异步代码可能会导致许多问题,包含性能问题、死锁和竞争条件。通常最好防止混合同步和异步代码,除非你有充沛的理由这样做。
有一些状况下,混合应用同步和异步代码是能够的:
- 当咱们须要从同步办法调用异步办法时:在这种状况下,能够应用
await
关键字暂停同步办法并期待异步办法实现。 - 当咱们须要从异步办法调用同步办法时:在这种状况下,能够应用
Task.Run()
办法在独自的线程上执行同步办法。
以下是从同步办法调用异步办法的示例:
public void DoWork() {
// Sync code here
await DoAsyncWork();
// Sync code here
}
public async Task DoAsyncWork() {// Async code here}
以下是从异步办法调用同步办法的示例:
public async Task DoAsyncWork() {
// Async code here
await Task.Run(() => DoSyncWork());
// Async code here
}
public void DoSyncWork() {// Sync code here}
除非有特定的起因,否则通常最好防止混合应用同步和异步代码。混合应用同步和异步代码可能会导致性能问题、死锁和竞争条件。然而,在某些状况下,有必要混合应用同步和异步代码,例如从同步办法调用异步办法或从异步办法调用同步办法。在混合应用同步和异步代码时,重要的是要正确处理错误并思考对性能和可维护性的潜在影响。
代码部署后可能存在的 BUG 没法实时晓得,预先为了解决这些 BUG,花了大量的工夫进行 log 调试,这边顺便给大家举荐一个好用的 BUG 监控工具 Fundebug。
交换
有幻想,有干货,微信搜寻 【大迁世界】 关注这个在凌晨还在刷碗的刷碗智。
本文 GitHub https://github.com/qq449245884/xiaozhi 已收录,有一线大厂面试残缺考点、材料以及我的系列文章。
https://levelup.gitconnected.com/5-async-await-best-practices…