简体   繁体   中英

Mysql NodeJs syncronous queries

Thank you for the answer,

I did that : i used "sync-mysql" :

but now its very very slow...

Maybe i could do the same code using Mysql NPM Do you know how my code must look like if I want to use asyncronous function and doing the same thing as below ? It will help me a lot :)

I have almost finished my project and I only have this function left

     const  customer_booked = []
  customer_booked[0] = []
  customer_booked[1] = []

  let sql = "SELECT *  " +
      "FROM customer as C " +
      "WHERE customer_reference REGEXP '^[c]i*' "
  if (filters[0].value.length){
      sql += "AND C.customer_name LIKE '%" + filters[0].value + "%' "
  }

  if (filters[3].value.length){
      sql += "LIMIT " + filters[3].value
  }

  var result = connection.query(sql);
  const customers = [];


  const booked = connection.query('SELECT cr.customer_id, a.codeAgent ' +
      'FROM customer_reservation as cr ' +
      'INNER JOIN agent as a ' +
      'ON a.id = cr.agent_id')

  booked.forEach(customer_booking => {
      customer_booked[0].push(customer_booking.customer_id)
      customer_booked[1].push(customer_booking.codeAgent)
  });

  result.forEach( customer => {
      var months;

      let d1 = new Date(customer.last_order);

      let d2 = new Date();

      months = (d2.getFullYear() - d1.getFullYear()) * 12;
      months -= d1.getMonth() + 1;
      months += d2.getMonth();

      months = months <= 0 ? 0 : months;

      if (customer_booked[0].includes(customer.customer_id)){
          let code_agent_index = customer_booked[0].indexOf(customer.customer_id)
          customer.available = 'booked'
          customer._rowVariant = 'warning'
          customer.agent_code = customer_booked[1][code_agent_index]
      }
      else if (months >= 12){
          customer.available = 'available'
          customer._rowVariant = 'success'
      } else {
          customer.available = 'notAvailable'
          customer._rowVariant = 'danger'
      }

       let sql2 = "SELECT * " +
           "FROM customer_addresses AS CA " +
           "WHERE CA.customer_id = " + customer.id

      customer.addresses = connection.query(sql2)
      customers.push(customer);
      //customers[customers.length].push()




  })

  callback(false, result)

You can use node.js async/await using IIFE , like this:

(async() => {
  const users = await getUsers();

  for(const user of users){
    user.addresses = await getAddresses(user.id);
    // your other code just translated to JS.
  }

  return users;
})()

So, the main idea is to await your async code.
For example we use IIFE (Immediately Invoked Function Expression) to access needed async/await and for tests.
In real code you should name functions with keyword async

Here is nice tutorials which could explain how to use async/await 1 , 2

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM