当前位置:首页 > JavaScript

js同步实现

2026-04-05 05:51:45JavaScript

同步与异步的概念

JavaScript 默认是单线程且异步的,但可以通过特定方式模拟同步行为。同步代码会阻塞后续执行,直到当前任务完成;异步代码则通过回调、Promise 或 async/await 实现非阻塞。

阻塞式同步(不推荐)

通过循环或 while 阻塞线程,强制等待条件满足。例如:

function syncDelay(millis) {
  const start = Date.now();
  while (Date.now() - start < millis) {}
}
console.log("开始");
syncDelay(3000); // 阻塞3秒
console.log("结束");

缺点:会冻结整个页面,仅适用于特定场景(如测试)。

Promise 链实现同步流程

利用 Promise.then() 将异步操作串联为顺序执行:

js同步实现

function task1() {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log("任务1完成");
      resolve();
    }, 1000);
  });
}

function task2() {
  return new Promise(resolve => {
    setTimeout(() => {
      console.log("任务2完成");
      resolve();
    }, 2000);
  });
}

task1().then(task2).then(() => console.log("全部完成"));

async/await 同步风格

async/await 是更直观的同步写法,底层仍基于 Promise:

async function runTasks() {
  await task1(); // 等待任务1完成
  await task2(); // 等待任务2完成
  console.log("全部完成");
}
runTasks();

优势:代码结构清晰,错误可通过 try/catch 捕获。

js同步实现

同步 AJAX 请求(已废弃)

早期 XMLHttpRequest 支持同步模式,但已被现代标准弃用:

const xhr = new XMLHttpRequest();
xhr.open("GET", "https://api.example.com/data", false); // 同步标志
xhr.send();
console.log(xhr.responseText); // 直接获取结果

注意:此方法会导致页面卡顿,不推荐使用。

Web Workers 多线程同步

通过 postMessageonmessage 在主线程与 Worker 间通信,模拟同步交互:

// 主线程
const worker = new Worker("worker.js");
worker.postMessage("start");
worker.onmessage = e => console.log(e.data);

// worker.js
self.onmessage = e => {
  const result = doHeavyTask(); // 耗时计算
  self.postMessage(result);
};

关键注意事项

  • 避免在主线程中使用阻塞式同步,否则影响用户体验。
  • async/await 是当前最推荐的同步风格写法。
  • 浏览器环境中,耗时操作应交给 Web Workers 或分批次异步处理。

标签: js
分享给朋友:

相关文章

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js手势实现

js手势实现

手势识别实现方法 在JavaScript中实现手势识别通常涉及监听触摸事件(touchstart、touchmove、touchend)或鼠标事件(mousedown、mousemove、mouseu…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…

js实现吸色

js实现吸色

使用Canvas实现吸色功能 通过Canvas的getImageData方法获取像素颜色数据。创建一个Canvas元素,将目标图像绘制到Canvas上,通过鼠标事件获取坐标对应的颜色值。 const…

js 实现跳转

js 实现跳转

使用 window.location.href 进行跳转 通过修改 window.location.href 可以跳转到指定 URL,浏览器会加载新页面: window.location.hre…

js计算器的实现

js计算器的实现

实现基础结构 HTML部分需要创建计算器的基本框架,包含显示区域和按钮。使用<div>容器包裹整个计算器,内部设置一个显示屏和多个按钮。 <div class="calculato…