当前位置:首页 > 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实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: functio…

js实现路由

js实现路由

js实现路由的方法 在JavaScript中实现路由功能可以通过多种方式完成,以下是几种常见的方法: 使用原生JavaScript实现路由 通过监听window.onhashchange事件来实现基…

js实现搜索

js实现搜索

实现搜索功能的方法 在JavaScript中实现搜索功能可以通过多种方式完成,以下是几种常见的实现方法。 使用数组的filter方法 通过数组的filter方法可以筛选出符合条件的数据项。假设有一个…

js 实现日历

js 实现日历

实现日历的基本思路 日历的核心功能是展示日期,并允许用户进行日期选择或导航。JavaScript 可以动态生成日历的 HTML 结构,并处理用户交互逻辑。 基础日历结构 日历通常包含头部(显示月份和…

js实现复选框

js实现复选框

实现复选框的基本方法 使用HTML的<input type="checkbox">元素创建复选框,并通过JavaScript监听其状态变化。 <input type="checkb…

js尚未实现

js尚未实现

JavaScript 尚未实现的功能 JavaScript 作为一门不断发展的语言,仍有一些功能尚未被原生支持或标准化。以下是一些常见的尚未实现的功能或特性: Promise.any() 的替代方案…