相关疑难解决方法(0)

"捕获"如何在原生Promise链中发挥作用?

在Chrome或Firefox的控制台选项卡上试用这段代码

var p = new Promise(function(resolve, reject) {
    setTimeout(function() {
        reject(10);
    }, 1000)
})

p.then(function(res) { console.log(1, 'succ', res) })
.catch(function(res) { console.log(1, 'err', res) })
.then(function(res) { console.log(2, 'succ', res) })
.catch(function(res) { console.log(2, 'err', res) })
Run Code Online (Sandbox Code Playgroud)

结果将是

1 "err" 10
2 "res" undefined
Run Code Online (Sandbox Code Playgroud)

我已经尝试了很多其他的例子,但似乎第一个then()返回一个总是解决并且永不拒绝的承诺.我在Chrome 46.0.2490.86和Firefox 42.0上试过这个.为什么会这样?我认为then()catch()可链多次?

javascript firefox google-chrome promise

7
推荐指数
1
解决办法
688
查看次数

如何处理 NestJS 中的 TypeORM 错误?

我想创建一个自定义异常过滤器来处理不同类型的 TypeORM 错误。我TypeORM 错误类,似乎 TypeORM 中没有像MongoError这样的东西。

我想做一些类似于1FpGLLjZSZMx6k's answer的东西,这是我到目前为止所做的。

import { QueryFailedError } from 'typeorm';

@Catch(QueryFailedError)
export class QueryFailedExceptionFilter implements ExceptionFilter {
  catch(exception: QueryFailedError, host: ArgumentsHost) {
    const context = host.switchToHttp();
    const response = context.getResponse<Response>();
    const request = context.getRequest<Request>();
    const { url } = request;
    const { name } = exception;
    const errorResponse = {
      path: url,
      timestamp: new Date().toISOString(),
      message: name,
    };

    response.status(HttpStatus.BAD_REQUEST).json(errorResponse);
  }
}

Run Code Online (Sandbox Code Playgroud)

例如,如果我需要捕获另一个错误EntityNotFoundError,我必须编写相同的代码,这是一项非常繁琐的任务。

如果我可以通过如下所示的单个过滤器处理错误,那就太好了。有任何想法吗?

@Catch(TypeORMError)
export class …
Run Code Online (Sandbox Code Playgroud)

javascript node.js typescript typeorm nestjs

5
推荐指数
2
解决办法
7935
查看次数

NestJs - 使用自定义过滤器和 @Catch(MongoError) 捕获 MongoDB 错误

我正在使用 NestJS 通过 MongoDB 创建自定义 API。我有以下设置:

  // users.controller.ts

  @Post('sign-up')
  @UseFilters(MongoExceptionFilter)
  async signUp(@Body() createUserDto: CreateUserDto): Promise<any> {
    return await this.userService.signUp(createUserDto).catch(error => {
      throw new BadRequestException(error);
    });
  }
Run Code Online (Sandbox Code Playgroud)
  // user.service.ts

  async signUp(createUserDto: CreateUserDto): Promise<User> {
  const createUser = new this.userModel(createUserDto);
    return await createUser.save();
  }
Run Code Online (Sandbox Code Playgroud)
  // mongo-exception.filter.ts

  import { ArgumentsHost,Catch, ConflictException, ExceptionFilter } from '@nestjs/common';
  import { MongoError } from 'mongodb';

  @Catch(MongoError)
  export class MongoExceptionFilter implements ExceptionFilter {
    catch(exception: MongoError, host: ArgumentsHost) {
      console.log('>>>>>>>>>>>>>>>>>>>> exception: ', exception);
    }
  }
Run Code Online (Sandbox Code Playgroud)
  // package.json
  "dependencies": { …
Run Code Online (Sandbox Code Playgroud)

javascript mongodb node.js typescript nestjs

3
推荐指数
1
解决办法
4259
查看次数