js 如何实现同步
同步实现方法
JavaScript 本身是单线程语言,但可以通过多种方式模拟同步行为或实现同步效果。
Promise 与 async/await
使用 async/await 语法可以编写类似同步代码的异步逻辑:
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
return data;
}
回调函数
通过嵌套回调实现顺序执行:
function task1(callback) {
setTimeout(() => {
console.log('Task 1 done');
callback();
}, 1000);
}
function task2() {
console.log('Task 2 done');
}
task1(task2);
Generator 函数
利用 Generator 的暂停执行特性:
function* syncTasks() {
yield task1();
yield task2();
}
const gen = syncTasks();
gen.next();
gen.next();
Web Workers
对于 CPU 密集型任务可使用 Worker:
// main.js
const worker = new Worker('worker.js');
worker.postMessage('start');
worker.onmessage = (e) => {
console.log(e.data);
};
// worker.js
self.onmessage = (e) => {
const result = heavyComputation();
self.postMessage(result);
};
同步 API
某些 API 提供同步版本:

// 同步 XMLHttpRequest (不推荐)
const request = new XMLHttpRequest();
request.open('GET', 'url', false); // 第三个参数 false 表示同步
request.send();
console.log(request.responseText);
注意事项
- 避免在主线程使用同步操作导致界面冻结
- 大多数浏览器 API 已弃用同步版本
- Node.js 中部分模块仍保留同步方法(如
fs.readFileSync)
选择实现方式时应根据具体场景评估性能影响和代码可维护性。






