方法 A 等方法 B 执行完再执行 叫同步调用还是异步调用 JS 默认是同步调用还是异步调用

方法 A 等方法 B 执行完再执行 叫同步调用还是异步调用 JS 默认是同步调用还是异步调用

一、方法 A 等方法 B 执行完再执行 叫同步调用还是异步调用

这叫同步调用

简单区分:

  • 同步调用:A 等 B 执行完,拿到结果后,A 才继续往下执行。(排队、阻塞等待)
  • 异步调用:A 告诉 B 去执行,不等待 B 的结果,A 立刻继续往下执行自己的事情。(发个消息就不管了,B 执行完通常通过回调或通知告诉 A)

需要我帮你展开讲讲异步调用的常见实现方式吗?比如回调、Promise、async/await 这些。

二、JS 默认是同步调用还是异步调用

JavaScript 默认是单线程 的,所以它的基础执行模型是同步的(即从上到下,一行一行地执行,前一行不执行完,后一行绝对不执行)。

但是,JS 又有一套非常核心的异步机制 (Event Loop 事件循环)。所以更准确的说法是:JS 整体是同步执行代码的,但遇到异步任务时,会把它们交给浏览器或 Node.js 去处理,等时机成熟再拿回主线程执行。

举个简单的例子:

javascript 复制代码
console.log('A'); // 同步,立即执行

setTimeout(() => {
  console.log('B'); // 异步,被挂起,等主线程空闲了再执行
}, 0);

console.log('C'); // 同步,立即执行

输出结果是: A -> C -> B

总结一下:

  • 普通代码 :默认是同步的。
  • 特定操作 (如网络请求、定时器、DOM事件、文件读取等):默认是异步的。

要不要我帮你梳理一下 JS 异步编程的演进过程?从回调函数到 Promise 再到 async/await,一步步看为什么 async/await 能解决"回调地狱"的问题。

三、async 是什么意思

在 JavaScript 中,asyncasynchronous(异步)的缩写。它是一个关键字,专门用来声明一个函数是"异步函数"。

结合我们刚才聊到的内容,你可以这样理解它的作用:

1. 自动包装 Promise

只要在一个函数前面加上 async,这个函数的返回值就会自动变成一个 Promise 对象。即使你在函数里直接 return "Hello",它也会自动变成 Promise.resolve("Hello")

2. 开启"等待"权限

async 函数内部允许使用另一个关键字 awaitawait 的意思是"等待",它能让异步代码看起来像同步代码一样,一行一行地执行。

举个直观的例子:

javascript 复制代码
async function fetchData() {
  // await 会让代码在这里"暂停"等待,直到请求完成
  const response = await fetch('https://api.example.com/data'); 
  const data = await response.json(); // 等数据解析完再继续
  
  return data; // 最终返回的 data 会被自动包装成 Promise
}

总结一下:

async 就像是给函数贴了一个标签,告诉 JavaScript 引擎:"这个函数里面有异步操作,请帮我把它变成 Promise,并允许我在里面使用 await 来优雅地等待结果。" 它的核心价值就是让原本复杂的异步代码,写起来像同步代码一样直观好读。


要不要我帮你对比一下 async/await 和 Promise 链式调用的写法区别?一眼就能看出为什么它能解决回调地狱。

相关推荐
言乐65 小时前
Python游戏水平测试辅助系统
开发语言·python·游戏·django·pygame
我命由我1234510 小时前
CesiumJS 笔记 - 获取容器中心点、Cartesian3 clone 方法、修改 Cartesian3 对象的高度
前端·javascript·css·前端框架·html·html5·js
抱抱宝11 小时前
Agent-study项目教程(03):手写 Mini-ReAct Agent(不依赖框架)
javascript·人工智能·gpt·react.js·prompt·agent
用户9385156350712 小时前
Next.js 笔记系统(二):Redis 数据服务与侧边栏组件拆分实战
javascript·全栈
WWJA王文举12 小时前
I²C通信完整流程详解:START、地址、ACK、数据、Repeated START和STOP一次讲透
c语言·开发语言
zhanghaha131412 小时前
Python进阶教程:6_JSON 数据解析 —— 新手完全指南
开发语言·python·json
qq_4480111614 小时前
C语言中的动态内存分配
c语言·开发语言·php
汉字萌萌哒14 小时前
2024CSP-J入门级C++真题详解
开发语言·c++
arbboter14 小时前
【网络工具】NetProxy网络代理用户手册
开发语言·网络·c#·网络代理·网络异常·代理工具
Heo15 小时前
大厂前端调试不能只会debugger
前端·javascript·面试