Loopback3
Hello i have a async remotheMethod and returns a warning "Error: Callback was already called."
How can i resolve that?
````javascript
Usuarios.usuarios_sin_grupos = async function (options, filter, cb) {
const usuariosGrupos = getManager().createQueryBuilder(UsuariosGruposEntity, 'usuarios_grupos').select("id_usuario");
var rawSql = false;
let manager = getManager()
.createQueryBuilder(UsuariosEntity, 'usuarios')
.where("usuarios.id NOT IN (" + usuariosGrupos.getSql() + ")");
utilidades.orderSkipLimit(manager, filter);
var resultado = await utilidades.obtenerDatos(rawSql, manager, filter);
if (resultado instanceof Error) {
cb(resultado);
} else {
cb(null, resultado);
}
};`
````
My method await utilidades.obtenerDatos:
````javascript
obtenerDatos: async function (rawSql, manager, filter) {
if (rawSql) {
var datos = await manager.getRawMany();
if (datos instanceof Error) {
return datos;
} else {
if (filter.get === "datacount") {
let data = [];
data.push(datos)
data.push(datos.length)
return datos;
} else {
return datos;
}
}
} else if (filter && filter.get && filter.get === "datacount") {
var datos = await manager.getManyAndCount();
return datos;
} else if (filter && filter.get && filter.get === "count") {
var datos = await manager.getCount();
return datos;
} else {
var datos = await manager.getMany();
return datos;
}
}
````
There is an error? or how can i fix the warning?
Thanks!
I think you don't have to use callback when using an async function
On Mon, May 27, 2019, 1:01 PM pookdeveloper notifications@github.com
wrote:
Description/Steps to reproduce
Loopback3
Hello i have a async remotheMethod and returns a warning "Error: Callback
was already called."
How can i resolve that?Usuarios.usuarios_sin_grupos = async function (options, filter, cb) {
const usuariosGrupos = getManager().createQueryBuilder(UsuariosGruposEntity, 'usuarios_grupos').select("id_usuario");
var rawSql = false;let manager = getManager() .createQueryBuilder(UsuariosEntity, 'usuarios') .where("usuarios.id NOT IN (" + usuariosGrupos.getSql() + ")"); utilidades.orderSkipLimit(manager, filter); var resultado = await utilidades.obtenerDatos(rawSql, manager, filter); if (resultado instanceof Error) { cb(resultado); } else { cb(null, resultado); } };`My method await utilidades.obtenerDatos:
obtenerDatos: async function (rawSql, manager, filter) {
if (rawSql) {
var datos = await manager.getRawMany();
if (datos instanceof Error) {
return datos;
} else {
if (filter.get === "datacount") {
let data = [];
data.push(datos)
data.push(datos.length)
return datos;
} else {
return datos;
}
}} else if (filter && filter.get && filter.get === "datacount") { var datos = await manager.getManyAndCount(); return datos; } else if (filter && filter.get && filter.get === "count") { var datos = await manager.getCount(); return datos; } else { var datos = await manager.getMany(); return datos; } }There is an error? or how can i fix the warning?
Thanks!—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/strongloop/loopback/issues/4206?email_source=notifications&email_token=ACK5UG5SQFMOFJ7NRE3DE3TPXOE5RA5CNFSM4HPZKDT2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4GV6XQSQ,
or mute the thread
https://github.com/notifications/unsubscribe-auth/ACK5UG3DXGHUETJVGDVQ273PXOE5RANCNFSM4HPZKDTQ
.
Thanks @sujeshthekkepatt can you put an example ?
@pookdeveloper What kind of example?
I try to update this part of code but dosen't work
````javascript
obtenerDatos: async function (rawSql, manager, filter) {
var data;
var error;
if (rawSql) {
var datos = await manager.getRawMany();
if (datos instanceof Error) {
error = datos;
} else {
if (filter.get === "datacount") {
let data = [];
data.push(datos)
data.push(datos.length)
data = datos;
} else {
data = datos;
}
}
} else if (filter && filter.get && filter.get === "datacount") {
var datos = await manager.getManyAndCount();
if (datos instanceof Error) {
error = datos;
} else {
data = datos;
}
} else if (filter && filter.get && filter.get === "count") {
var datos = await manager.getCount();
if (datos instanceof Error) {
error = datos;
} else {
data = datos;
}
} else {
var datos = await manager.getMany();
if (datos instanceof Error) {
error = datos;
} else {
data = datos;
}
}
// NEW PART OD CODE
return new Promise((resolve, reject) => {
if (error) {
reject(error);
} else {
resolve(data);
}
});
}
````
@pookdeveloper What kind of example?
And example for resolve my problem 😖
Thanks
@pookdeveloper you have to remove the callback from your code.
`Usuarios.usuarios_sin_grupos = async function (options, filter) {
const usuariosGrupos = getManager().createQueryBuilder(UsuariosGruposEntity, 'usuarios_grupos').select("id_usuario");
var rawSql = false;
let manager = getManager()
.createQueryBuilder(UsuariosEntity, 'usuarios')
.where("usuarios.id NOT IN (" + usuariosGrupos.getSql() + ")");
utilidades.orderSkipLimit(manager, filter);
var resultado = await utilidades.obtenerDatos(rawSql, manager, filter);
if (resultado instanceof Error) {
throw resultado ;
} else {
return resultado;
}
};
`
Hope this helps. Since the async function always returns a promise you don't have to explicitly return a promise(ie NEW PART OF CODE). Also, your remote method is an async function so you don't have to use callback there. Hope this helps
@pookdeveloper See more at https://loopback.io/doc/en/lb3/Remote-methods.html
Most helpful comment
@pookdeveloper you have to remove the callback from your code.
`Usuarios.usuarios_sin_grupos = async function (options, filter) {
const usuariosGrupos = getManager().createQueryBuilder(UsuariosGruposEntity, 'usuarios_grupos').select("id_usuario");
var rawSql = false;
`
Hope this helps. Since the async function always returns a promise you don't have to explicitly return a promise(ie NEW PART OF CODE). Also, your remote method is an async function so you don't have to use callback there. Hope this helps