Skip to content

Instantly share code, notes, and snippets.

@viniceosm
Last active July 31, 2018 11:35
Show Gist options
  • Save viniceosm/7097289992f0ec9bd00d16c9588da472 to your computer and use it in GitHub Desktop.
Save viniceosm/7097289992f0ec9bd00d16c9588da472 to your computer and use it in GitHub Desktop.
function to search with mongoose and concatenate results

concatRes(addAttrReference, fnsPesquisa [, callback])

param type description
addAttrReference boolean true se quer que adicione um atributo dizendo de que model ela é
fnsPesquisa array array de objeto com controller e query
callback função opcional, função de retorno quando terminar a concatenação
var cFis = {
  name: () => 'fisica',
  pesquisa: (query, cb) => {
    cb([{ queryUsada: query }]);
  }
}, cJu = {
  name: () => 'juridica',
  pesquisa: (query, cb) => {
    cb([{ queryUsada: query }]);
  }
};

function concatRes(addAttrReference, fnsPesquisa, callback) {
  let arrayRetorno = [];
  chamaProximoController(0);

  function chamaProximoController(index) {
    if (index < fnsPesquisa.length) {
      fnsPesquisa[index].controller.pesquisa(fnsPesquisa[index].query, (resultado) => {
        if (addAttrReference === true) {
          resultado = resultado.map((res) => {
            return { ...res, nameCollection: fnsPesquisa[index].controller.name() };
          });
        }

        arrayRetorno = [...arrayRetorno, ...resultado];
        chamaProximoController(index + 1);
      });
    } else {
      // terminou tudo, manda o array concatenado
      callback(arrayRetorno);
    }
  }
}

concatRes(true,
  [{ controller: cFis, query: 'Paulão' },
  { controller: cJu, query: 'Maquinas do Serginho' }], function (array) {
  console.log(array);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment