Search code examples
sails.jswaterline

Waterline ORM assign the result of find to a variable


I want to combine the results of 2 queries and then return them as one, like this:

test: async (req, res) => {
  const valOne = TableOne.find({ id: id })
      .exec((err, result) => {
        if (err) {
          res.serverError(err);
        }
        return result;
      });
  const valTwo = TableTwo.find({ id: id })
      .exec((err, result) => {
        if (err) {
          res.serverError(err);
        }
        return result;
      });
  const data = {
    keyOne: valOne,
    keyTwo: valTwo,
  };
  res.json(data);
}    

I understand above code won't return because it's async. How can I achieve this?


Solution

  • There is not much info you supply: node version, sails version, etc.

    There are several approaches here: 1. Using promises 2. Using callback chaining 3. Using await/async

    If you use sails 1.0 and node >= 8, your best bet is to use await/async, so your code should work like that:

    test: async (req, res) => {
      let valOne, valTwo;
    
      try {
        valOne = await TableOne.find({ id: id });
        valTwo = await TableTwo.find({ id: id });
      } catch (err) {
        return res.serverError(err); //or res.badRequest(err);
      }
    
      const data = {
        keyOne: valOne,
        keyTwo: valTwo,
      };
    
      res.json(data);
    }