Moved from GitHub dgraph-js/39
Posted by Oroneki:
public async confirmaUsuarioViaUuid(uuid: string) {
const query = `query user($id: string){
user(func: eq(uuid, $id)) @filter(has(mUser)) {
uid
}
}`;
const txn = this._client.newTxn();
const res = await txn.queryWithVars(query, { $id: uuid });
const arrUser = res.getJson().user;
d("arr -> %O", arrUser)
if (arrUser.length === 0) {
await txn.discard()
throw new Error("Uuid nao existe.");
}
const uid: string = arrUser[0].uid
try {
const data = new Date();
const p = {
uid,
[fieldNames.confirmado]: true,
[fieldNames.dataAtualizacao]: data,
};
const mu = new dgraph.Mutation();
mu.setCommitNow(true);
await mu.setSetJson(p);
const assigned = await txn.mutate(mu);
d("assigned --- ")
await txn.commit();
// COMMIT ------------------------------------------
d("commit --- ")
assigned.getUidsMap().forEach((id, key) => d(`\n\n\t${key} => ${id}\n\n`));
return p;
} finally {
await txn.discard();
d("foi --- ")
}
}
I am testing the above method. When I use ratel to see if the changes were persisted I can confirm they were, but my test always show the debug messages "assigned — ", "commit — " and "foi — " after the test been runned. My test is not the problem since I make a call to that method and AFTER the method returns I do another cal to the function below:
public async queryUserByUuid(uuid: string): Promise<any> {
const query = `query user($id: string){
user(func: eq(uuid, $id)) @filter(has(mUser)) {
uid
uuid
email
confirmado
}
}`;
const vars = { $id: uuid };
const tnx = this._client.newTxn()
const res = await tnx.queryWithVars(query, vars);
const ppl = res.getJson();
await tnx.discard();
d("query --> %O", ppl.user[0]);
return ppl.user[0];
}
The value “confirmado” I receive after calling the second method is still undefined for a moment. If I put a setTimeout on it it returns “true” as expected. I concluded that the “commit” call on the transaction still takes some milisseconds to fully concludes but releases the method before…
Am I missing something or it is really a bug ?