Advertisement
gleki

async traversal

May 8th, 2021
889
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const data = [
  2.     {
  3.         title: "title-1.1",
  4.         children: [
  5.             {
  6.                 title: "title-2.1",
  7.             },
  8.             {
  9.                 title: "title-2.2",
  10.                 children: [
  11.                     {
  12.                         title: "title-3.1",
  13.                     }
  14.                 ]
  15.             }
  16.         ]
  17.     },
  18.     {
  19.         title: "title-1.2",
  20.         children: [
  21.             {
  22.                 title: "title-2.1",
  23.                 children: [],
  24.             }
  25.         ]
  26.     }
  27. ]
  28.  
  29.  
  30.  
  31. let titles = []
  32. let jobs = 0
  33. let finished = false
  34. async function ticker() {
  35.     while (!finished) {
  36.         await new Promise(resolve => setTimeout(resolve, 250));
  37.         console.log({message: 'ticker running', timestamp: new Date()})
  38.     }
  39.     console.log({message: 'finished', titles})
  40. }
  41.  
  42. async function traverse(obj) {
  43.     await new Promise(resolve => setTimeout(resolve, 1000));
  44.     if (obj.children && obj.children.length > 0) jobs++
  45.     const progress = titles.length / jobs
  46.     if (progress === 1) finished = true
  47.     console.log({ message: 'traversing JSON', titles, jobs, progress })
  48.  
  49.     if (typeof obj.title !== 'undefined') titles.push(obj.title)
  50.     if (obj.children && obj.children.length > 0)
  51.         for (const child of obj.children) {
  52.             traverse(child);
  53.         }
  54. }
  55.  
  56. ticker();
  57. jobs++
  58. traverse({ children: data })
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement