【问题标题】:Problem with async/await service response with callback [duplicate]带有回调的异步/等待服务响应问题[重复]
【发布时间】:2021-01-25 20:20:20
【问题描述】:

我正在使用 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”库并返回回调。

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 不等待来自数据库的回调

我不知道如何解决它。

【问题讨论】:

  • @Apicito Diaz,我已经添加了答案,让我知道它是否有效

标签: typescript async-await firebird


【解决方案1】:

使用如下承诺包装您在 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);
        });
    });
});

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 1970-01-01
    • 2017-10-18
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    • 2011-12-21
    • 2017-03-31
    • 2021-03-11
    相关资源
    最近更新 更多