Advertisement
Guest User

Async.eachSeries vs forEach

a guest
Jan 22nd, 2016
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //I first wrote the migrate script something like this with a forEach.
  2. //And thought that it, itself was not blocking:
  3.    
  4.     import mysql  from 'mysql';
  5.     import mongo  from 'mongodb';
  6.     import assert from 'assert';
  7.     import argv from 'yargs';
  8.     import async from 'async';
  9.     import config from './config.json';
  10.  
  11.  
  12.     const url = config.mongodb;
  13.    
  14.     const MongoClient = mongo.MongoClient;
  15.    
  16.     let databases = config.databases;
  17.     let neededFields= config.neededFields;
  18.     let settings = new Array();
  19.     let posts = new Array();
  20.     let mongo_posts = null
  21.     let mongo_settings = null
  22.     let mongodb = null
  23.    
  24.     function complete(){
  25.    
  26.       console.log( 'complete');
  27.       mongo_settings.insert(settings, (err, result)=>{
  28.         mongo_posts.insert(posts, (err, result)=>{
  29.           mongodb.close();
  30.         })
  31.       });
  32.    
  33.     }
  34.    
  35.     function syncSettings(){
  36.    
  37.      databases.forEach( (database ) => {
  38.         console.log( database );
  39.         let connection = mysql.createConnection({
  40.           host: config.host,
  41.           user: config.user,
  42.           password: config.password,
  43.           database: database
  44.         });
  45.    
  46.         connection.connect();
  47.    
  48.         connection.query("select * from wp_options ", (err, rows, fields) => {
  49.           console.log( "select * from wp_options ");
  50.           let domain_setting = {}
  51.           if(!err){
  52.    
  53.    
  54.              rows.forEach( (item,index) => {
  55.                if( neededFields.find( ( x ) =>  x == item['option_name']   )){
  56.                  if( item['option_name'] == 'siteurl')
  57.                   domain_setting['domain'] = item['option_value'].replace(/.*?:\/\//g, "");
  58.                  else
  59.                   domain_setting[item['option_name']] = item['option_value'];
  60.                }
  61.              });
  62.    
  63.             settings.push(domain_setting);
  64.           }
  65.    
  66.    
  67.           connection.query("select * from wp_posts ", (err, rows, fields) => {
  68.             console.log( "select * from wp_posts ");
  69.             if(!err){
  70.    
  71.               rows.forEach( (item,index) => {
  72.                 try{
  73.                   let insertObj = {};
  74.    
  75.                   insertObj['post_name']= item['post_name'];
  76.                   insertObj['post_title']  = item['post_title'];
  77.                   insertObj['post_content']= item['post_content'].replace(/\r\n/g, '<br />');
  78.                   insertObj['post_date']= item['post_date'];
  79.                   insertObj['post_modified'] = item['post_modified'];
  80.                   insertObj['post_status'] = item['post_status'];
  81.                   insertObj['post_status'] = item['post_status'];
  82.                   insertObj['domain'] = domain_setting['domain']
  83.    
  84.                   posts.push(insertObj)
  85.                 }catch(e){
  86.                   console.error( e );
  87.                   process.exit(1);
  88.                 }
  89.    
  90.               });
  91.    
  92.             }
  93.    
  94.    
  95.    
  96.           });
  97.  
  98.         });
  99.    
  100.  
  101.           console.log('end')
  102.           connection.end();
  103.       });
  104.    
  105.       complete();
  106.     }
  107.    
  108.     MongoClient.connect(url, (err, db) => {
  109.    
  110.       assert.equal(null, err);
  111.       mongodb = db;
  112.       console.log("Connected correctly to server");
  113.       mongo_posts = db.collection('posts')
  114.       mongo_settings = db.collection('settings')
  115.       syncSettings();
  116.    
  117.     });
  118.  
  119.  
  120. //But then I figured out why this version here works correctly
  121.  
  122.     import mysql  from 'mysql';
  123.     import mongo  from 'mongodb';
  124.     import assert from 'assert';
  125.     import argv from 'yargs';
  126.     import async from 'async';
  127.     import config from './config.json';
  128.     // Connection URL
  129.    
  130.    
  131.    
  132.     const url = config.mongodb;
  133.    
  134.     const MongoClient = mongo.MongoClient;
  135.    
  136.     let databases = config.databases;
  137.     let neededFields= config.neededFields;
  138.     let settings = new Array();
  139.     let posts = new Array();
  140.     let mongo_posts = null
  141.     let mongo_settings = null
  142.     let mongodb = null
  143.    
  144.     function complete(){
  145.    
  146.       mongo_settings.insert(settings, (err, result)=>{
  147.         mongo_posts.insert(posts, (err, result)=>{      
  148.           mongodb.close();
  149.         })
  150.       });
  151.    
  152.     }
  153.    
  154.     function syncSettings(){
  155.    
  156.       async.eachSeries( databases, ( database, next ) => {
  157.    
  158.         let connection = mysql.createConnection({
  159.           host: config.host,
  160.           user: config.user,
  161.           password: config.password,
  162.           database: database
  163.         });
  164.    
  165.         connection.connect();
  166.    
  167.         connection.query("select * from wp_options ", (err, rows, fields) => {
  168.           let domain_setting = {}
  169.           if(!err){
  170.    
  171.    
  172.              rows.forEach( (item,index) => {
  173.                if( neededFields.find( ( x ) =>  x == item['option_name']   )){
  174.                  if( item['option_name'] == 'siteurl')
  175.                   domain_setting['domain'] = item['option_value'].replace(/.*?:\/\//g, "");
  176.                  else
  177.                   domain_setting[item['option_name']] = item['option_value'];
  178.                }
  179.              });
  180.    
  181.             settings.push(domain_setting);
  182.           }
  183.    
  184.    
  185.           connection.query("select * from wp_posts ", (err, rows, fields) => {
  186.             if(!err){
  187.    
  188.               rows.forEach( (item,index) => {
  189.                 try{
  190.                   let insertObj = {};
  191.    
  192.                   insertObj['post_name']= item['post_name'];
  193.                   insertObj['post_title']  = item['post_title'];
  194.                   insertObj['post_content']= item['post_content'].replace(/\r\n/g, '<br />');
  195.                   insertObj['post_date']= item['post_date'];
  196.                   insertObj['post_modified'] = item['post_modified'];
  197.                   insertObj['post_status'] = item['post_status'];
  198.                   insertObj['post_status'] = item['post_status'];
  199.                   insertObj['domain'] = domain_setting['domain']
  200.    
  201.                   posts.push(insertObj)
  202.                 }catch(e){
  203.                   console.error( e );
  204.                   process.exit(1);
  205.                 }
  206.    
  207.               });
  208.    
  209.             }
  210.    
  211.        
  212.           connection.end();
  213.           next();
  214.    
  215.           });
  216.  
  217.         });
  218.    
  219.    
  220.       }, complete );
  221.    
  222.    
  223.     }
  224.    
  225.     MongoClient.connect(url, (err, db) => {
  226.    
  227.       assert.equal(null, err);
  228.       mongodb = db;
  229.       console.log("Connected correctly to server");
  230.       mongo_posts = db.collection('posts')
  231.       mongo_settings = db.collection('settings')
  232.       syncSettings();
  233.    
  234.     });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement