Skip to content

任务队列的中断和恢复

Code

ts
/**
 * 依次顺序执行一系列任务
 * 所有任务全部完成后可以得到每个任务的执行结果
 * 需要返回两个方法,start用于启动任务,pause用于暂停任务
 * 每个任务具有原子性,即不可中断,只能在两个任务之间中断
 * @param {...Function} tasks 任务列表,每个任务无参、异步
 */

function processTasks(...tasks) {
  return {};
}

解析

ts
function processTasks(...tasks) {
  let isRunning = false;
  const result = [];
  let i = 0;
  return {
    start() {
      return new Promise(async (resolve) => {
        if (isRunning) {
          return;
        }
        isRunning = true;
        while (i < tasks.length) {
          const task = tasks[i];
          const r = await task();
          result.push(r);
          i++;
          // 如果暂停了,直接断开
          if (!isRunning) {
            return;
          }
        }
        isRunning = false;

        resolve(result);
      });
    },
    pause() {
      isRunning = false;
    },
  };
}