Chained promise theory

Each node is a async job, illustrated by setTimeout. A, B, and C can run at the same time. D, needs to wait for A and B to be done. E needs to wait for C and D to be done. Today's Tasks

by Pankaj Parkar

JavaScript

/* 
  Each node is a async job, illustrated by setTimeout.
  A, B, and C can run at the same time.
  D, needs to wait for A and B to be done.
  E needs to wait for C and D to be done.
  Today's Tasks
*/

async function processAsync() {
	const ab = Promise.all([taskA(), taskB()]);
	const abc = Promise.all([ab, taskC()]);
  await ab;
  await Promise.all([abc, taskD()])
  taskE();
}

processAsync();


function taskA() {
	return task(1000)
}

function taskB() {
	return task(500)
}

function taskC() {
	return task(1000)
}

function taskD() {
	return task(100)
}

function taskE() {
	return task(3000)
}

function task(timer){
	const caller = arguments.callee.caller.name;
  console.log('Task started '+ caller);
	return new Promise((resolve) => {
  	setTimeout(() => {
  		console.log('Task ended '+ caller);
    	resolve();
    }, timer);
  });
}