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

相关推荐
liulun1 小时前
C++ WinRT中的事件
开发语言·c++
whitelbwwww1 小时前
c++运行onnx模型
开发语言·c++
码来的小朋友2 小时前
手把手教你用 Python + PyQt5 做一个可视化图片切图工具
开发语言·python·microsoft
触底反弹2 小时前
🔥 字符串算法面试三连击:反转、回文、回文变种,搞懂这三题稳了!
前端·javascript·算法
触底反弹2 小时前
AI Tool Use 深度解析:大模型是如何"突破物理限制"调用外部工具的?
javascript·人工智能·后端
竹林8182 小时前
从 RPC 超时到批量签名:我用 @solana/web3.js 重构了一个 NFT 铸造页面,踩了这些坑
前端·javascript
aaaameliaaa2 小时前
计算斐波那契数(递归、迭代)(1,1,2,3,5.....)
c语言·开发语言·笔记·算法·排序算法
m0_547486662 小时前
《模式识别:使用MATLAB分析与实现》全套PPT课件
开发语言·matlab·模式识别
Tim_102 小时前
【C++】009、extern关键字
java·开发语言