Advertisement
Andrzej_Kmicic

Promise for forEach wit SetTimOut in resolve

Dec 4th, 2018
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. const fs = require('fs');
  2. console.time('chunk_execute_time');
  3. var now = new Date();
  4. var daysOf = [];
  5. var game = "IL"
  6. var timerId = 0;
  7. var outarray = [];
  8. const datafile = __dirname + '/files/file.txt';
  9.  
  10. for (var d = new Date(2017, 0, 1); d <= now; d.setDate(d.getDate() + 1)) {
  11.     daysOf.push(new Date(d).toLocaleDateString().replace(/-([0-9]{1})(\s|-|$)/, '-0$1$2').replace(/-([0-9]{1})(\s|-|$)/, '-0$1$2'));
  12. }
  13.  
  14. function chunker(n) {
  15.     return function (p, c, i) {
  16.         (p[i / n | 0] = p[i / n | 0] || []).push(c);
  17.         return p;
  18.     };
  19. }
  20.  
  21. var chunks = daysOf.reduce(chunker(50), []);
  22.  
  23. // chunks.forEach(chunk => {
  24. //     var fromDate = chunk[0];
  25. //     var toDate = chunk[chunk.length - 1];
  26. //     filename = __dirname + `/files/${game}-fromDate-${fromDate}-toDate-${toDate}.json`;
  27. // });
  28.  
  29. console.timeEnd('chunk_execute_time');
  30.  
  31. function sleep(milliseconds) {
  32.     var start = new Date().getTime();
  33.     for (var i = 0; i < 1e7; i++) {
  34.         if ((new Date().getTime() - start) > milliseconds) {
  35.             break;
  36.         }
  37.     }
  38. }
  39.  
  40. const addDrawObj = (obj) => {
  41.     outarray.push(obj);
  42. };
  43.  
  44.  
  45.  
  46. var getPage = (item, callback) => {
  47.     sleep(15);
  48.     fs.readFile(datafile, 'utf8', function (err, contents) {
  49.         callback(contents);
  50.     });
  51. }
  52.  
  53. const parsePage = (data,item) => {
  54.     sleep(15);
  55.     var out = JSON.parse(data);
  56.     out[0].date = item+' 00:00:01';
  57.     out[1].date = item+' 00:00:02';
  58.     out[2].date = item+' 00:00:03';
  59.     return (out);
  60. }
  61.  
  62. // pętla główna dla jednego kawałka tablicy
  63. console.time('loop_time');
  64. var days = chunks[0];
  65.   var go = new Promise((resolve, reject) => {
  66.         days.forEach((item) => {
  67.             getPage(item, (html) => {
  68.                 let data = parsePage(html,item);
  69.                     addDrawObj(data);
  70.             });  
  71.         });
  72.        
  73.         setTimeout(function() {
  74.             resolve();
  75.           }, 30); // działa od minimum 3ms ???
  76.        
  77.     });
  78.  
  79. // go.then((value) => {
  80. //     console.log(value);
  81. //     //console.log(outarray);
  82. // });
  83.  
  84. Promise.all([go]).then(() => {
  85.     if (outarray.length>0) {
  86.         outarray.sort((a,b)=>{
  87.             let da = new Date(a[0].date);
  88.             let db = new Date(b[0].date);
  89.             return da-db;
  90.         })
  91.         }
  92.     outarray.forEach((element,idx) => {
  93.         if (idx>45)
  94.         console.log(element);
  95.     });    
  96.     console.log('length data:'+outarray.length);
  97.     console.timeEnd('loop_time');
  98. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement