js同步实现
同步与异步的概念
JavaScript 是单线程语言,默认采用异步非阻塞模式处理耗时操作(如网络请求、文件读写)。同步代码会阻塞主线程,直到操作完成。
同步实现方法
使用回调函数嵌套
通过回调函数的嵌套可以实现同步执行效果,但会导致“回调地狱”:
function task1(callback) {
console.log('Task 1');
callback();
}
function task2(callback) {
console.log('Task 2');
callback();
}
task1(() => {
task2(() => {
console.log('All tasks completed');
});
});
使用 Promise 链式调用
Promise 的 .then() 方法可以实现顺序执行:
function asyncTask1() {
return new Promise(resolve => {
console.log('Task 1');
resolve();
});
}
function asyncTask2() {
return new Promise(resolve => {
console.log('Task 2');
resolve();
});
}
asyncTask1()
.then(() => asyncTask2())
.then(() => console.log('All tasks completed'));
使用 async/await
ES7 的 async/await 是同步写法的终极方案:
async function executeTasks() {
await asyncTask1();
await asyncTask2();
console.log('All tasks completed');
}
executeTasks();
强制同步的替代方案
对于某些原生异步 API,可通过以下方式强制同步:
fs.readFileSync(Node.js 文件同步读取)XMLHttpRequest的同步模式(已废弃)Worker线程中执行耗时任务
注意事项
- 浏览器环境中同步操作会导致 UI 冻结
- Node.js 中同步 I/O 会降低服务器吞吐量
- 现代 JavaScript 开发推荐使用 async/await 代替回调
- 执行顺序保证不等于性能优化,需合理设计异步流程






