Mausim,
O método DatasetFactory.getDataset não retorna uma Promise, por isso não é possível usar async/await. Ele até fornece uma assinatura pra trabalhar sem ser de forma assíncrona, mas sempre tive erros com ele.
Eu fiz uma wrapper pra isso.
Lembrando que é necessário importar a vcXMLRPC.js e isso só funciona no navegador, pois essa nova sintaxe não é aceita pelo Rhino na hora de converter pra Java e assim executar no back-end do Fluig.
/**
* Pega um dataset
*
* Wrapper para tornar a DatasetFactory.getDataset em Promise.
*
* @param {string} dataset Nome do Dataset
* @param {string[]} fields Campos para retornar (pode ser null pra retornar todos)
* @param {Constraint[]} constraints Os filtros a aplicar ou null se não filtrar nada
* @param {string[]} sorters Campos para ordenar ou null para não ordenar. Pode colocar ;desc no campo para ordenar decrescente
* @returns {Promise} Resolve com o objeto dataset {columns: string[], values: string[]}
*/
function getDataset(dataset, fields, constraints, sorters) {
return new Promise(function (resolve, reject) {
DatasetFactory.getDataset(
dataset,
fields,
constraints,
sorters,
{
success: data => resolve(data),
error: () => reject(arguments)
}
);
});
}
Aí consigo usar normalmente o async/await. Só lembrando que ao usar async/await é bom usar try...catch.
async function asyncExample() {
try {
let attachments = await getDataset(
"ds_process_attachments_files",
null,
[DatasetFactory.createConstraint("processId", agenda.idprocesso, agenda.idprocesso, ConstraintType.MUST)],
null
).values;
// resto do código
} catch (error) {
console.error(error);
}
}
E também consigo trabalhar normalmente com as Promises:
getDataset(
"ds_reuniao_direx",
["processInstanceId", "cardDocumentId", "type", "sponsor", "subject", "goal"],
[
DatasetFactory.createConstraint("meetingName", "", "", ConstraintType.MUST)
],
null
)
.then(dataset => dataset.values)
.then(function (data) {
// resto do código
})
.catch(error => console.log(error));