方法 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 去处理,等时机成熟再拿回主线程执行。
举个简单的例子:
console.log('A'); // 同步,立即执行
setTimeout(() => {
console.log('B'); // 异步,被挂起,等主线程空闲了再执行
}, 0);
console.log('C'); // 同步,立即执行
输出结果是: A -> C -> B
总结一下:
- 普通代码:默认是同步的。
- 特定操作(如网络请求、定时器、DOM事件、文件读取等):默认是异步的。
要不要我帮你梳理一下 JS 异步编程的演进过程?从回调函数到 Promise 再到 async/await,一步步看为什么 async/await 能解决"回调地狱"的问题。
三、async 是什么意思
在 JavaScript 中,async 是 asynchronous(异步)的缩写。它是一个关键字,专门用来声明一个函数是“异步函数”。
结合我们刚才聊到的内容,你可以这样理解它的作用:
1. 自动包装 Promise
只要在一个函数前面加上 async,这个函数的返回值就会自动变成一个 Promise 对象。即使你在函数里直接 return "Hello",它也会自动变成 Promise.resolve("Hello")。
2. 开启“等待”权限
async 函数内部允许使用另一个关键字 await。await 的意思是“等待”,它能让异步代码看起来像同步代码一样,一行一行地执行。
举个直观的例子:
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 链式调用的写法区别?一眼就能看出为什么它能解决回调地狱。
1万+

被折叠的 条评论
为什么被折叠?



