Javascript API端点在不等待承诺的情况下返回有什么缺点吗?

Javascript API端点在不等待承诺的情况下返回有什么缺点吗?,javascript,node.js,express,Javascript,Node.js,Express,为了让express端点更快地返回给调用方,调用异步任务,但如果调用方不需要确认,则在返回之前不等待异步任务是否合理 这显然限制了异步任务失败时的错误处理和重试选项,但假设您不关心这一点,它确实允许express API调用更快地完成(假设等待异步任务在语义上对API调用没有意义) 这种方法与通过API请求调用的其他web后台作业方法相比如何?这类方法还行,但正如您所提到的,它在重试、监视和同步调用方面存在一些缺点 您可能应该做的是将消息推送到队列中,并让后台工作人员进行处理。将记录保存到表示操

为了让express端点更快地返回给调用方,调用异步任务,但如果调用方不需要确认,则在返回之前不等待异步任务是否合理

这显然限制了异步任务失败时的错误处理和重试选项,但假设您不关心这一点,它确实允许express API调用更快地完成(假设等待异步任务在语义上对API调用没有意义)


这种方法与通过API请求调用的其他web后台作业方法相比如何?

这类方法还行,但正如您所提到的,它在重试、监视和同步调用方面存在一些缺点


您可能应该做的是将消息推送到队列中,并让后台工作人员进行处理。将记录保存到表示操作状态的数据库中,然后将消息排入队列。您可以通过查看刚刚保存的记录的状态来监视该工作的进度,并让工作人员对其进行更新

有时是完全合适的,有时则不合适。这实际上取决于特定的API操作、客户的期望、客户可能的使用以及API的文档化方式

例如,核心数据库操作永远不会这样做,因为显然客户机通常需要知道数据库操作是否成功

但是,一个与广告相关的API只是收集跟踪数据并将其存储起来供以后使用,它的客户端可能会忽略API调用的任何返回,如果HTTP连接能够尽快关闭(无需等待一些存储提交完成),那么整件事可能会扩展得更好。此外,如果在发生异常情况时丢失某些此类数据,那也没什么大不了的,客户也不会做任何不同的事情。因此,如果您已经确定客户端不需要操作的最终状态,并且在异步操作完成之前结束请求会带来规模或性能方面的好处,那么这是非常合适的


在另一个示例中,假设您有一个写入队列,在实际将N个日志项全部写入磁盘之前,先将内存中的N个日志项排队写入磁盘,因为这样可以显著提高磁盘I/O的可伸缩性和性能。在这种情况下,直到队列达到触发实际物理写入的特定大小时,其他客户机发出某个未来请求,才会发生对磁盘的最终写入。等待最终写入以返回成功的API响应,这将对主机API服务器(甚至对客户端)造成重大损失。

什么是“其他web后台作业方法”?我不理解问题的这一部分。@jfriend00的意思是,任何通过接收API请求而被调用/启动的任务,但API调用返回时不需要谁的响应。下面提到的一个示例是将这样的请求添加到队列中,并允许另一个进程拾取并执行它。