同步:方法执行时调用线程会停下来等待执行完成后立即返回结果。 异步:方法执行时调用线程不会停下来执行完成后通过回调函数/Promise 返回结果这使得调用线程在方法执行的同时可以继续执行其他任务。
| 同步 | 异步 | |
|---|---|---|
| 定义 | 要求在发出请求后等待结果返回才能继续执行 | 发出请求后可以立即继续执行而无需等待结果返回 |
| 执行顺序 | 顺序执行,按照请求的顺序依次处理 | 可以并发执行,无需等待前一个请求完成 |
| 阻塞 | 在等待结果返回期间,当前线程或进程会被阻塞 | 不会阻塞当前线程或进程,可以同时执行其他任务 |
| 资源利用 | 使用同步方式可能会导致资源浪费,因为必须等待结果 | 使用异步方式可以更好地利用资源,因为可以在等待结果期间处理其他任务 |
| 错误处理 | 同步请求通常使用异常处理机制来处理错误 | 异步请求通常使用回调函数或 Promise 来处理错误 |
| 编程复杂性 | 相对较简单,代码顺序执行 | 相对较复杂,需要处理回调函数、异步事件等 |
| 示例 | 同步调用函数、阻塞式 I/O 操作 | 异步回调函数、非阻塞式 I/O 操作 |
JavaScript 异步实现方法
使用回调函数、Promise、async/await 等机制处理异步操作,setTimeout 和 setInterval 用于延迟执行或周期性执行操作,Promise 处理异步操作结果和流程控制,async/await 简化异步操作的编写,fetch 和 XMLHttpRequest 用于发起网络请求和通信。
| 方法 | 区别 | 用途 |
|---|---|---|
setTimeout | 在指定的延迟时间后执行回调函数 | 延迟执行一段代码或在一段时间后执行某个操作 |
setInterval | 每隔一定时间执行回调函数 | 重复执行某个操作,创建周期性任务 |
Promise | 支持异步操作的对象,可以处理成功和失败状态 | 处理异步操作结果,进行流程控制和错误处理 |
async/await | 基于 Promise 的语法糖,用于编写更直观的异步代码 | 简化异步操作的编写,使其看起来像同步代码 |
fetch | 发起网络请求并返回 Promise 对象 | 获取数据和进行网络通信 |
XMLHttpRequest | 发起网络请求并进行异步通信 | 旧版的网络请求方法,仍然被广泛使用 |