0

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)
1

1 Answer 1

2

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

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.