Advertisement
Guest User

Untitled

a guest
Mar 1st, 2020
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 1.92 KB | None | 0 0
  1. let sleepRaw = ms => new Promise(
  2.   resolve => setTimeout(resolve, ms));
  3.  
  4. let sleep = async ms => {
  5.   console.log('>');
  6.   await sleepRaw(1000);
  7.   console.log('<');
  8. }
  9.  
  10. let getFavouriteColor = async () => {
  11.   await sleep(1000);
  12.   return 'red';
  13. }
  14.  
  15. let getFavouriteStyles = async () => {
  16.   await sleep(1000);
  17.   return ['sporty', 'floral', 'modern'];
  18. }
  19.  
  20. let getBall = async (color) => {
  21.   await sleep(3000);
  22.   return `a ${color} ball`;
  23. }
  24.  
  25. let getBike = async (color) => {
  26.   await sleep(3000);
  27.   return `a ${color} bike`;
  28. }
  29.  
  30. let buildItemList = async (items) => {
  31.   await sleep(1000);
  32.   if (items.length==0) {
  33.     return 'nothing';
  34.   }
  35.   if (items.length==1) {
  36.     return items[0];
  37.   }
  38.   return `${items.slice(0,-1).join(", ")} and ${items[items.length-1]}`;
  39. }
  40.  
  41. let describeSceneSerial = async () => {
  42.   let color = await getFavouriteColor();
  43.   let styles = await getFavouriteStyles();
  44.   let ball = await getBall(color);
  45.   let bikes = [];
  46.   for (const style of styles) {
  47.     bikes.push(await getBike(style));
  48.   }
  49.   let itemList = buildItemList([ball, ...bikes]);
  50.   return `You can see ${await itemList}.`;
  51.   // 'You can see a red ball, a sporty bike, a floral bike and a modern bike.'
  52. }
  53.  
  54. let describeSceneParallel = async () => {
  55.   let color = getFavouriteColor();
  56.   let styles = getFavouriteStyles();
  57.   let ball = (async () => getBall(await color))();
  58.   let bikes = (async () => Promise.all(
  59.     (await styles).map(style => getBike(style))
  60.   ))();
  61.   let itemList = buildItemList([await ball, ...await bikes]);
  62.   return `You can see ${await itemList}.`;
  63.   // 'You can see a red ball, a sporty bike, a floral bike and a modern bike.'
  64. }
  65.  
  66. let demo = async () => {
  67.   console.log('Serial:');
  68.   const serialResult = await describeSceneSerial();
  69.   console.log(serialResult);
  70.   console.log('Parallel:');
  71.   const parallelResult = await describeSceneParallel();
  72.   console.log(parallelResult);
  73. }
  74.  
  75. demo();
Advertisement
RAW Paste Data Copied
Add Comment
Please, Sign In to add comment
Advertisement