NodeJS

Bulk queries with promises

Implementing a Promise function we can recurvise execute a list of queries to a data base. This function wait for the response of each query for execute the next of the list.

Array

This is the array of queries to do

le queries = [
  `INSERT IGNORE INTO keywords ( name ) VALUES ( 'keyword')`,
  `INSERT IGNORE INTO tip_keywords ( tip_id, keyword_id ) VALUES ( '1', 'keyword' )`
];

Function

This function implements a Promise pattern

const queriesExecute = (q, index = 0) => {
  let queries = q;
  new Promise(function(resolve, reject) {
    console.log(queries[index]);
    connection.query(queries[index], (err, row) => {
      if (err) {
        reject(err);
      } else {
        console.log(`Keyword added!`.green);
        resolve(row);
      }
    });
  })
  .then(data => {
    if (index < queries.length - 1) {
      index++;
      queriesExecute(queries, index);
    } else {
      connection.end();
    }
  })
  .catch(err => {
    queryError(err, query);
  });
};

Full example

This example get the key from param and edit the secon query with an Helper function.

'use strict';
const db = require('./DataBase')();
const connection = db.connect();
const tip = process.argv[3];
const keyword = process.argv[4];
const queryError = (err, query) => {
  console.log(`Error while performing Query:`.red);
  console.log(`${query}`.yellow);
  console.log(`${err}`.red);
  connection.end();
};
const queriesExecute = (q, index = 0) => {
  let queries = q;
  new Promise(function(resolve, reject) {
    console.log(queries[index]);
    connection.query(queries[index], (err, row) => {
      if (err) {
        reject(err);
      } else {
        console.log(`Keyword "${keyword}" added!`.green);
        resolve(row);
      }
    });
  })
  .then(data => {
    if (index < queries.length - 1) {
      index++;
      queryHelper(queries, index, {id: data.insertId});
      queriesExecute(queries, index);
    } else {
      connection.end();
    }
  })
  .catch(err => {
    queryError(err, query);
  });
};
const queryHelper = (query, index, data) => {
  query[index] = query[index].replace('%KEYWORD_ID%', data.id);
  return query;
};
queriesExecute([
  `INSERT IGNORE INTO keywords ( name ) VALUES ( '${keyword}')`,
  `INSERT IGNORE INTO tip_keywords ( tip_id, keyword_id ) VALUES ( '${tip}', '%KEYWORD_ID%' )`
]);

Esta página web usa cookies

Este sitio web utiliza cookies para obtener datos estadísticos de la navegación de sus usuarios. Si pulsas en "ACEPTAR" (o continuas navegando en la página web) entendemos que consientes al uso de cookies. Si quieres, puedeso ampliar esta información.

Esta landing page utiliza cookies para el correcto funcionamiento y visualización de los sitios Web por parte del usuario, así como la recogida de datos estadísticos y analiticos sobre la navegación de los usuarios, utiliza las siguientes cookies:

Las cookies necesarias ayudan a hacer una página web utilizable activando funciones básicas como la navegación en la página y el acceso a áreas seguras de la página web. La página web no puede funcionar adecuadamente sin estas cookies.

Estas Cookies recopilan información de tu experiencia de navegación en nuestros portales web de forma totalmente anónima. - Podemos contabilizar el número de visitantes de la página o los contenidos más vistos.