js 实现同步
同步实现方法
JavaScript 是单线程语言,但可通过以下方式模拟同步行为:
Promise 与 async/await
使用 async/await 语法糖简化异步代码的编写,使其看起来像同步代码:
async function fetchData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
console.log(data);
}
回调函数
通过嵌套回调实现顺序执行,但可能导致回调地狱:
function task1(callback) {
setTimeout(() => {
console.log('Task 1 done');
callback();
}, 1000);
}
function task2() {
console.log('Task 2 done');
}
task1(task2);
Generator 函数
利用 yield 暂停函数执行,实现同步效果:
function* generatorFunc() {
yield console.log('Step 1');
yield console.log('Step 2');
}
const gen = generatorFunc();
gen.next();
gen.next();
Web Workers
在后台线程运行耗时操作,避免阻塞主线程:
const worker = new Worker('worker.js');
worker.postMessage('start');
worker.onmessage = (e) => {
console.log(e.data);
};
同步 AJAX(不推荐)
使用 XMLHttpRequest 的同步模式,会阻塞 UI:

const xhr = new XMLHttpRequest();
xhr.open('GET', 'url', false); // 同步请求
xhr.send();
console.log(xhr.responseText);
注意事项
- 避免使用同步 AJAX,会导致页面冻结
async/await需要 Promise 支持- Generator 需配合执行器使用
- Web Workers 不能直接访问 DOM






