Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在NestJs中捕获Typeorm事务错误_Javascript_Graphql_Nestjs_Typeorm - Fatal编程技术网

Javascript 如何在NestJs中捕获Typeorm事务错误

Javascript 如何在NestJs中捕获Typeorm事务错误,javascript,graphql,nestjs,typeorm,Javascript,Graphql,Nestjs,Typeorm,我用node.js和nestJs编写了一个服务器端,用typeorm进行查询 我正试图用事务将一些查询封装到数据库中,正如typeorm的一些变化所建议的那样,如下所示: getManager().transaction(async transactionalEntityManager => { transactionalEntityManager.save<Entity>(newEntity) transactionalEntityManager.save&l

我用node.js和nestJs编写了一个服务器端,用typeorm进行查询

我正试图用事务将一些查询封装到数据库中,正如typeorm的一些变化所建议的那样,如下所示:

getManager().transaction(async transactionalEntityManager => {
    transactionalEntityManager.save<Entity>(newEntity)
    transactionalEntityManager.save<Entity1>(newEntity1)
});
getManager().transaction(异步transactionalEntityManager=>{
transactionalEntityManager.save(新建实体)
transactionalEntityManager.save(newEntity1)
});
事务运行良好,如果出现错误,将回滚数据库。 以这种方式进行测试:

getManager().transaction(async transactionalEntityManager => {
    transactionalEntityManager.save<Entity>(newEntity)
    throw 'There is an error'
    transactionalEntityManager.save<Entity1>(newEntity1)
});
getManager().transaction(异步transactionalEntityManager=>{
transactionalEntityManager.save(新建实体)
抛出“有错误”
transactionalEntityManager.save(newEntity1)
});
事务的执行是在graphQL变异中进行的,因此如果出现问题,我应该向客户端返回一个错误,问题是我无法捕获事务中的错误

尝试这样做:

  @Mutation(returns => Entity)
  async create(): Promise<Entity> {
    let entity = null;
    let error = null;
    getManager().transaction(async transactionalEntityManager => {
      try {
        entity = await transactionalEntityManager.save<Entity>(newEntity)
        await transactionalEntityManager.save<Entity1>(newEntity1);
      } catch (err) {
        error = err
      }
    })
    if (error) {
      return error
    }
    return entity
  }
@变异(返回=>实体)
异步创建():承诺{
让实体=null;
设错误=null;
getManager().transaction(异步transactionalEntityManager=>{
试一试{
实体=等待transactionalEntityManager.save(新建实体)
等待transactionalEntityManager.save(newEntity1);
}捕捉(错误){
错误=错误
}
})
如果(错误){
返回错误
}
返回实体
}

当我抛出错误时,我成功地捕捉到了它,但当真正的错误发生时,我可以在服务器中
console.log()
它,但它永远不会返回到客户端。

您没有等待事务完成,因此,可以在函数调用结束后抛出异常,而不会得到异常

只要等待你的交易,它应该是罚款

await getManager().transaction(async transactionalEntityManager => {
  ...
  throw 'ERROR THAT SHOULD BE CATCHED'
}
此外,它还返回内部函数的结果,因此它可能很有用

const ok = await getManager().transaction(async transactionalEntityManager => {
  await transactionalEntityManager.save<Entity>(newEntity)
  await transactionalEntityManager.save<Entity>(newEntity2)
  return 'OK'
}
const ok=wait getManager().transaction(异步transactionalEntityManager=>{
等待transactionalEntityManager.save(新建实体)
等待transactionalEntityManager.save(newEntity2)
返回“OK”
}