主任务并行运行,子任务依次运行。

所以我有一个用例,我有5个主任务,在主任务里面有3个子任务(比如异步IO操作)。主任务是独立的,而单个主任务中的子任务是相互依赖的。我可以顺序运行所有的任务,但这将是一个巨大的CPU时间浪费.我需要一种方法来使用async-await和Promise来并行运行所有的主任务,并在每个主任务内顺序运行子异步任务。

解决方案:

我使用vanilla JavaScript得出的解决方案 async awaitPromise

async function myFunc() {
  const list = ["MainA:", "MainB:", "MainC:", "MainD:", "MainE:"];
  let allPromises = [];
  list.forEach(main => {
    allPromises.push(runSubTasks(main));
  });
  console.log("allPromises before settle:", allPromises);
  let data = await Promise.all(allPromises);
  console.log("allPromises after settle:", allPromises);
  console.log("resolved values inside allPromises:", data);
  // All main tasks are done by this point
}

myFunc();

async function runSubTasks(main) {
  const one = await asyncSubTask1(main, "");
  const two = await asyncSubTask2(main, one);
  return asyncSubTask3(main, two);
  // or
  // const three = await runTask3(main, two);
  // return three;
}

function asyncSubTask1(main, sub) {
  return new Promise((res, rej) => {
    setTimeout(() => {
      console.log(`${main}${sub}1`);
      res(`${sub}1`);
    }, Math.random() * 10000);
  });
}
function asyncSubTask2(main, sub) {
  return new Promise((res, rej) => {
    setTimeout(() => {
      console.log(`${main}${sub}2`);
      res(`${sub}2`);
    }, Math.random() * 10000);
  });
}
function asyncSubTask3(main, sub) {
  return new Promise((res, rej) => {
    setTimeout(() => {
      console.log(`${main}${sub}3`);
      res(`${main}${sub}3`);
    }, Math.random() * 10000);
  });
}

给TA打赏
共{{data.count}}人
人已打赏
解决方案

从已知基类的未知派生类初始化对象。

2022-4-22 4:00:17

解决方案

改造服务器响应的默认值显示为空。

2022-4-22 4:00:19

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索