📜  javascript 并发 (1)

📅  最后修改于: 2023-12-03 15:31:42.794000             🧑  作者: Mango

JavaScript并发编程

JavaScript是一种单线程语言,这意味着一次只能执行一个任务。这限制了JavaScript在多个任务之间的并发处理。但是,JavaScript提供了一些并发编程模式和工具来克服这个限制。

回调函数

回调函数是一种常见的并发编程模式。它允许在任务完成时通知程序。在JavaScript中,回调函数可以作为另一个函数的参数传递。当任务完成时,回调函数会被调用。

function doSomething(callback) {
  // do something
  callback();
}

function callbackFunction() {
  console.log("The task has been completed.");
}

doSomething(callbackFunction);
Promise

Promise是一种并发编程模式,它允许异步操作在完成后返回一个值或抛出错误。Promise有三种状态:未完成、已完成、已拒绝。当异步操作完成时,Promise将从未完成状态转换为已完成状态。

function doSomething() {
  return new Promise((resolve, reject) => {
    // do something
    if (/* 操作成功 */) {
      resolve("The task has been completed.");
    } else {
      reject("The task failed.");
    }
  });
}

doSomething()
  .then(result => console.log(result))
  .catch(error => console.error(error));
Async/Await

Async/Await是一种更直观的并发编程模式。这是ES8中引入的一种新特性。Async函数返回一个Promise对象。在Async函数内部,可以使用Await操作符等待异步操作完成。

async function doSomething() {
  // do something
  return "The task has been completed.";
}

async function main() {
  try {
    const result = await doSomething();
    console.log(result);
  } catch (error) {
    console.error(error);
  }
}

main();
Web Workers

Web Workers允许JavaScript在后台线程中运行。它们提供了一种将耗时任务从主UI线程中分离的方法。Web Workers具有自己的全局作用域和消息传递接口。

// worker.js
self.addEventListener("message", event => {
  // do something
  self.postMessage("The task has been completed.");
});

// main.js
const worker = new Worker("worker.js");
worker.addEventListener("message", event => {
  console.log(event.data);
});
worker.postMessage(/* 发送消息 */);

以上是JavaScript并发编程的一些常见模式和工具。它们可以让开发人员更好地处理并发任务,提高程序的性能和响应能力。