async/await 服务响应回调有问题
Problem with async/await service response with callback
我正在使用 node-firebird JavaScript 模块来查询 Firebird 数据库。
模块以回调响应,我无法让 async / await 为我工作以等待来自该模块的响应。
“padron.controller”控制器调用“padron.service”服务进行查询
try {
let res = await this.padronService.getFamilia(body);
console.log('padron.controller - Response from padron.service', res);
return res;
} catch {
throw new Error('Erro na DB');
}
"padron.service" 调用 "firebird.service" 将所有查询集中到数据库。
try {
let res = await this.firebirdService.getQuery(query, params);
console.log('padron.service - Response from FirebirdService ================', res);
return res;
} catch {
throw new Error('Erro na DB');
}
“firebird.service”使用“node-firebird”库和 returns 回调。
fb.attach(this.options, (err, db) => {
if (err) throw new Error('Erro na conexión á DB');
db.query(query, params, (err, res) => {
if (err) throw new Error('Erro na consulta ó Padrón');;
console.log('firebird.service - Response DB ================', res);
db.detach();
return res
});
});
我的问题是答案的顺序
padron.service - Response desde FirebirdService ================ undefined
padron.controller - Response desde padron.service undefined
firebird.service - Response DB ================ {
USU_USUARIO: 'SUPER',
USU_CLAVES: '',
USU_CARGO: 'ADMINISTRADOR',
USU_TER: null,
什么时候下单应该
firebird.service - Respuesta DB ================ {
USU_USUARIO: 'SUPER',
USU_CLAVES: '',
padron.service - Respuesta desde FirebirdService ================ undefined
padron.controller - Respuesta desde padron.service undefined
await不等待DB的回调
而且我不知道如何修复它。
用如下承诺包装您在 padron.service 中提到的代码。现在从db返回的值是通过在resolve回调中传递返回的,如果有错误,在reject回调中传递。
注意,如果出现错误,将其传递给异步任务中的拒绝回调,因为与抛出错误相比,它不会给出意外的输出
return new Promise((resolve, reject) => {
fb.attach(this.options, (err, db) => {
if (err) {
// throw new Error('Erro na conexión á DB');
reject('Erro na consulta ó Padrón');
}
db.query(query, params, (err, res) => {
if (err) {
// throw new Error('Erro na consulta ó Padrón');
reject('Erro na consulta ó Padrón');
}
console.log('firebird.service - Response DB ================', res);
db.detach();
// return res
resolve(res);
});
});
});
我正在使用 node-firebird JavaScript 模块来查询 Firebird 数据库。
模块以回调响应,我无法让 async / await 为我工作以等待来自该模块的响应。
“padron.controller”控制器调用“padron.service”服务进行查询
try {
let res = await this.padronService.getFamilia(body);
console.log('padron.controller - Response from padron.service', res);
return res;
} catch {
throw new Error('Erro na DB');
}
"padron.service" 调用 "firebird.service" 将所有查询集中到数据库。
try {
let res = await this.firebirdService.getQuery(query, params);
console.log('padron.service - Response from FirebirdService ================', res);
return res;
} catch {
throw new Error('Erro na DB');
}
“firebird.service”使用“node-firebird”库和 returns 回调。
fb.attach(this.options, (err, db) => {
if (err) throw new Error('Erro na conexión á DB');
db.query(query, params, (err, res) => {
if (err) throw new Error('Erro na consulta ó Padrón');;
console.log('firebird.service - Response DB ================', res);
db.detach();
return res
});
});
我的问题是答案的顺序
padron.service - Response desde FirebirdService ================ undefined
padron.controller - Response desde padron.service undefined
firebird.service - Response DB ================ {
USU_USUARIO: 'SUPER',
USU_CLAVES: '',
USU_CARGO: 'ADMINISTRADOR',
USU_TER: null,
什么时候下单应该
firebird.service - Respuesta DB ================ {
USU_USUARIO: 'SUPER',
USU_CLAVES: '',
padron.service - Respuesta desde FirebirdService ================ undefined
padron.controller - Respuesta desde padron.service undefined
await不等待DB的回调
而且我不知道如何修复它。
用如下承诺包装您在 padron.service 中提到的代码。现在从db返回的值是通过在resolve回调中传递返回的,如果有错误,在reject回调中传递。
注意,如果出现错误,将其传递给异步任务中的拒绝回调,因为与抛出错误相比,它不会给出意外的输出
return new Promise((resolve, reject) => {
fb.attach(this.options, (err, db) => {
if (err) {
// throw new Error('Erro na conexión á DB');
reject('Erro na consulta ó Padrón');
}
db.query(query, params, (err, res) => {
if (err) {
// throw new Error('Erro na consulta ó Padrón');
reject('Erro na consulta ó Padrón');
}
console.log('firebird.service - Response DB ================', res);
db.detach();
// return res
resolve(res);
});
});
});