当前位置: 首页 > 知识库问答 >
问题:

如何返回202 Accepted然后在nest.js中继续处理请求

卫甫
2023-03-14
    null

共有1个答案

申屠新觉
2023-03-14

我希望您有一个服务执行外部API调用(异步),并返回promise可观察:

@Injectable()
export class ExternalApiService {
  constructor(private readonly httpService: HttpService) {}

  makeApiCall(data): Observable<AxiosResponse<any>> {
    return this.httpService.post('https://external.api', data);
  }
}

我还假设有一个PreprocesserService进行异步调用(例如,从数据库获取用户信息)。

@Post()
@UseGuards(AuthGuard('jwt'))
@HttpCode(HttpStatus.ACCEPTED)
async post(@Body(new ValidationPipe()) myDataDto: MyDataDto) {
  // The preprocessing might throw an exception, so we need to wait for the result
  const preprocessedData = await this.preprocessService.preprocess(myDataDto);
                           ^^^^^
  // We do not need the result to respond to the request, so no await
  this.externalApiService.makeApiCall(preprocessedData);
  return 'Your data is being processed.';
}

当您进行异步调用时,只有当您通过使用async/await或返回promise/可观察显式地告诉控制器方法执行时,控制器方法才会等待执行。

 类似资料:
  • 在一些请求中,我们会做一些日志的推送、用户数据的统计等和返回给终端数据无关的操作。而这些操作,即使你用异步非阻塞的方式,在终端看来,也是会影响速度的。这个和我们的原则:终端请求,需要用最快的速度返回给终端,是冲突的。 这时候,最理想的是,获取完给终端返回的数据后,就断开连接,后面的日志和统计等动作,在断开连接后,后台继续完成即可。 怎么做到呢?我们先看其中的一种方法: local response

  • 我有一个使用Spring Boot的APIendpoint。这个endpoint所做的是调用另外两个APIendpoint并处理它们的响应。 该过程的前半部分调用一个 API 终结点,获取响应并将此响应与 202 Accepted 一起返回到表面。 在202被返回之后,后台正在经历该过程的第二部分。它从第一个API调用中获取响应并进一步处理它。 我尝试过使用或,但它们在返回202之后都停止了,并且

  • 问题内容: 我有一个JavaScript代码,需要向其中添加睡眠/等待功能。我正在运行的代码已经在一个函数中,例如: 我听说可能的解决方案可能包括 但我不确定在这种情况下如何使用它。 我不能使用PHP,因为我的服务器不支持PHP,尽管使用jQuery可以。 问题答案: JS没有睡眠功能,它具有 setTimeout() 或setInterval() 函数。 如果您可以将暂停后需要运行的代码移到回调

  • 问题内容: PHP中是否可以关闭连接(本质上告诉浏览器没有更多数据可用)但是可以继续处理。我正在考虑的特定情况是,我想提供缓存的数据,然后,如果缓存已过期,我仍然会提供缓存的数据以快速响应,关闭连接,但继续进行处理以重新生成并缓存新的数据数据。本质上,唯一的目的是使网站显得更具响应性,因为在用户等待内容重新生成时不会偶尔出现延迟。 更新: PLuS对我一直在寻找最接近的答案。为了澄清几个人,我正在

  • 我目前有一个Web钩子,它调用AWS API网关- 我继续从Lambda(节点v6.10)上做了这个早期回复,但它似乎没有改善响应能力。API网关是否在等待Lambda完成执行,尽管已经收到了回调的响应? 另一个想法是发布来自Lambda的SNS通知,并让第二个Lambda监听并继续处理,但如果有更简单的方法,则宁愿避免这种复杂性。

  • 我想在我的Async任务中使用一个Weak引用来不泄漏内存。通过我可以看到的日志语句,如果我把活动留在后退按钮上,我从方法返回的活动引用确实为空。但是,当我旋转设备时,我得到了一个工作引用,这意味着我泄漏了内存。知道为什么会发生这种情况吗? 更新:在旋转设备并打开其他应用程序后,我一离开活动,它就开始显示null。是不是因为我的活动很简单,系统就没有必要进行清理?