方法 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 链式调用的写法区别?一眼就能看出为什么它能解决回调地狱。

相关推荐
雪芽蓝域zzs32 分钟前
第十六节:递归组件实现无限层级折叠侧边栏菜单
开发语言·javascript·ecmascript
神明不懂浪漫1 小时前
【第二章】库、表、增删改查操作
开发语言·数据库·经验分享·笔记
传奇开心果编程1 小时前
【Rust入门知识点学与练】第11课:HashMap 键值对集合
开发语言·学习·rust
yume_sibai1 小时前
03-Rust 函数式编程特性(闭包 + Iterator + Option/Result + 链式调用)
开发语言·后端·rust
奈斯先生Vector2 小时前
AIGC 视频生成实战:用 Kling Video 拆解文生视频、图生视频与完整工作流
开发语言·人工智能·windows·python·aigc·音视频
小玮看世界2 小时前
[Python]螺旋遍历 vs 最短路径:方向控制类算法的“同源异流”
开发语言·python·算法
BillKu2 小时前
vue3 字符串排序 localeCompare,确保排序为 “B01“, “B10“, “B2“
前端·javascript·vue.js
OPEN-F2 小时前
ROS2系列教程:tf2坐标变换详解(C++/Python)
开发语言·c++·python
然我2 小时前
从 Service 到生命周期:Agent Runtime 的插件内核
前端·javascript·agent
XR1234567882 小时前
医院基础网络改造升级选型深度解析
开发语言·网络·php