如何异步处理100条数据

84 阅读1分钟

假设你有一个数组里有100条数据,分发给10台打印机,如何快速的打印出这100条数据

// 假设有100条数据的数组
const data = [...Array(100).keys()].map((index) => `Data ${index + 1}`);

// 10台打印机的数量
const printerCount = 10;

// 模拟分发和打印过程
function distributeAndPrintData(data, printerCount) {
  const dataPerPrinter = Math.ceil(data.length / printerCount);

  for (let i = 0; i < printerCount; i++) {
    const startIndex = i * dataPerPrinter;
    const endIndex = startIndex + dataPerPrinter;
    const dataToPrint = data.slice(startIndex, endIndex);

    // 模拟打印过程,这里用setTimeout模拟每台打印机的异步打印
    setTimeout(() => {
      printData(dataToPrint, i + 1);
    }, i * 1000); // 假设每台打印机打印一批数据需要1秒钟
  }
}

// 模拟打印函数
function printData(dataToPrint, printerNumber) {
  console.log(`Printer ${printerNumber} 正在打印:`);
  dataToPrint.forEach((item) => {
    console.log(item);
  });
  console.log(`Printer ${printerNumber} 打印完成!`);
}

// 启动分发和打印过程
distributeAndPrintData(data, printerCount);

首先生成一个包含100条数据的虚拟数组。然后,我们将数据分发给10台打印机,每台打印机负责打印一部分数据。我们使用setTimeout来模拟每台打印机的异步打印过程,假设每台打印机打印一批数据需要1秒钟。当所有数据被打印完成后,每台打印机都会输出打印完成的消息。