urlname
type
Post
password
SyncToConfluence
category
编程基础
date
May 12, 2024
slug
01HXPHJGF9SX010MFKX15JRX90
icon
Button
catalog
summary
tags
JavaScript
编程语言
cover
Status
BusyTime
Status 1
status
Published
😀
主要记录关于JavaScript的异步编程的学习内容,方便回顾和学习。主要内容由GPT帮忙整理。

😋 引入

JavaScript 的异步编程允许在执行任务时保持代码非阻塞,尤其是在处理 I/O 操作、用户输入或定时器时,避免卡住主线程。

📝 回调函数

  • 回调函数是异步编程的基础。
  • 可以把一个函数作为参数传递给另一个函数,并在某个事件或操作完成后调用它。

示例说明

注意事项:

  • 嵌套的回调函数可能导致“回调地狱”,使代码难以维护。
  • 为了避免这种情况,应该尽量简化逻辑或使用更先进的异步处理方式。

🤌 Promise

一个提供链式处理的对象,用于追踪异步操作的状态。
  • 状态:
    • pending(等待中):异步操作正在进行。
    • fulfilled(已完成):异步操作已成功完成。
    • rejected(已拒绝):异步操作遇到错误。

示例说明

  • .then 可以链接多个,以处理多个异步操作。
  • .catch 用于捕获异常并进行处理。

async/await

  • async/await 是 ES2017 引入的语法糖,用于更优雅地处理异步操作。
  • async 声明函数为异步函数,await 用于等待一个 Promise 完成并获取结果。

示例说明

注意事项:

  • await 只能在 async 函数中使用。
  • async 函数总是返回一个 Promise,可以使用 .then.catch 进行处理。

👏 事件循环和任务队列

  • 事件循环是 JavaScript 异步执行的基础。它包括:
    • 任务队列: 事件循环将任务按先进先出的顺序从队列中取出并执行。
    • 宏任务与微任务: 宏任务包括 setTimeoutsetInterval,微任务包括 Promise 回调和 process.nextTick(Node.js)。

示例说明:

注意事项:

  • 微任务优先于宏任务执行,因此 Promise 的回调会先于 setTimeout 执行。
  • 了解事件循环的机制,有助于调试异步代码执行顺序的问题。

😄 总结与最佳实践

  • 防止“回调地狱”: 尽可能简化异步逻辑,或使用 Promiseasync/await
  • 捕获异常: 始终处理 Promiseasync 函数中的错误。
  • 保持非阻塞: 不要在异步函数中执行长时间阻塞的同步操作。
  • 错误链式传递: 确保错误能够在异步链中被正确捕获和处理。
TypeScript——类型基础JavaScript——模块化
Loading...