打字稿返回和异步等待

时间:2021-06-08 20:29:44

标签: javascript node.js typescript

我在打字稿中遇到了设计问题。在我的控制器中,我执行了一个验证,验证方法返回 422 响应,该响应结束了我尝试使用的线程或经过验证的数据。所以这是我的代码。在我的控制器中,我有

async createFeed(ctx : HttpContextContract){
    await this.feedValidator.createFeedValidate(ctx)
    return this.feedService.createFeed(ctx)
  }

此处 await this.feedValidator.createFeedValidate(ctx) 执行验证逻辑,此方法返回 422 或已验证对象

try {
        const payload = await ctx.request.validate({ schema: createFeedSchema, messages : msg })
        return payload
      } catch (error) {
         return ctx.response.status(422).send(error.messages)
  }


现在,使用这种方法,我无法访问验证方法返回的 payload

如果我尝试

let validatedData = await this.feedValidator.createFeedValidate(ctx)
return this.feedService.createFeed(ctx,validatedData)

如果验证返回 return ctx.response.status(422).send(error.messages)

,则线程不会停止

无论如何,我可以做方法链或有很好的高级解决方案吗?

先谢谢你。

1 个答案:

答案 0 :(得分:3)

您似乎在使用 AdonisJS。 如果您查看文档,发送方法 (ctx.response.status(422).send(error.messages)) 会返回“void”,即什么都没有。 这就是为什么您无法从尝试捕获中获得回报的原因。

或者,您可以执行以下操作:

你的 createFeedValidateMethod 应该只包含这个:

return ctx.request.validate({ schema: createFeedSchema, messages : msg })

并在您的控制器中:

async createFeed(ctx : HttpContextContract){
   try {
    let validatedData = await this.feedValidator.createFeedValidate(ctx)
    return this.feedService.createFeed(ctx, validatedData)
   } catch (err) {
     return ctx.response.status(422).send(error.messages)
   }
}