Como esperar a resposta de uma função assíncrona(Javascript/Cordova)?

Estou desenvolvendo um app Cordova e estou utilizando o plugin Sqlite para fazer consultas no banco de dados. Porém como as funções de querys são assincronas estou com um problema para criar um array multidimensional.

tx.executeSql("select que pesquisa os grupos", [], function(tx, grupos) {      var arrayGrupos = []; // Cria uma variavel para armazenar os grupos     for(grupoAtual in grupos) { // faz o loop pelos grupos          var arrayItensGrupos = []; // Cria uma variavel para armazenar os itens dos grupos         tx.executeSql("select que pesquisa os itens dos grupos", [], function(tx, itensGrupos) {              for(itemAtual in itensGrupos) { // faz o loop pelos itens dos grupos                  detalhesItem = { // Cria o item                     nomeItem: itemAtual.nome_item                     ...                 }                 arrayItensGrupos.push(detalhesItem); // Adiciona o item ao array              }          }          detalhesGrupo = { // Cria o grupo             nomeGrupo: grupoAtual.nome_grupo,             listadeItens: arrayItensGrupos //** adiciona o array com os itens         }         arrayGrupos.push(detalhesGrupo); // Adiciona o grupo ao array      }  }); 

Quando dou um console.log no array de grupos (arrayGrupos) ele me retorna os grupos com o nome certo, porém o array com a lista de itens do grupo (listadeItens: arrayItensGrupos) vem vazia. Alguns grupos tem varios itens e outros não, nesses com poucos itens vem a lista normal porém no grupo que demora um pouco mais ele não espera retornar todos os itens(pela função ser assincrona) e mostra como se a lista estivesse vazia.

Então tem como esperar a função executeSql(assíncrona) retornar o resultado para prosseguir?