一、背景
在项目开发的过程中,有一个场景描述如下:上传文件,文件在后端处理,处理完成之后在反馈给前端。实际使用的例子:PDF裁剪,PDF转word,音频文字转化等。这次遇到的场景是音频文字的转化。
场景描述:文件先上传,上传成功之后,给前端反馈已经成功上传,此时前端进入等候状态,等待后端处理完成的反馈,前端接收反馈将等候状态更改成已完成的状态,给用户提供下载。使用以下的状态图进行描述。
二、解决
这里需要考虑的问题有两个:第一个是文件上传之后就需要给前端反馈,文件处理时前端需要处于等待状态。第二个是处理文件的时间不一致,需要在完成时给前端反馈。虽然代码是一行一行执行,但是在实际的过程中发现,在后端进行解析过程时,前端并没有等待后端的反馈,而是直接执行了下面的代码,因此这里需要使用严格的执行顺序。
2.1 不太完美的解决方案
这里有一个思路就是过一段时间之后在执行后端反馈的代码,这里有一个弊端就是,时间设置的长短,时间长了,后端已经处理完成,没必要继续等待,时间短了还没有处理完成就会出现前端报错的情况。因此这个解决方案可以解决问题,但是存在一定的问题。
2.2 其余的解决方案
把操作结果放在then中,也就是使用promise的方式,这样在处理完成之后就会执行逻辑代码,可以得到反馈的结果,这个方法避免了在success中的操作,可以直接操作后续内容。
三、总结
使用钩子函数,回调函数,或者是promise的方法都会使得异步的处理更加的可靠。