一、背景
在項目開發的過程中,有一個場景描述如下:上傳文件,文件在后端處理,處理完成之后在反饋給前端。實際使用的例子:PDF裁剪,PDF轉word,音頻文字轉化等。這次遇到的場景是音頻文字的轉化。
場景描述:文件先上傳,上傳成功之后,給前端反饋已經成功上傳,此時前端進入等候狀態,等待后端處理完成的反饋,前端接收反饋將等候狀態更改成已完成的狀態,給用戶提供下載。使用以下的狀態圖進行描述。
二、解決
這里需要考慮的問題有兩個:第一個是文件上傳之后就需要給前端反饋,文件處理時前端需要處於等待狀態。第二個是處理文件的時間不一致,需要在完成時給前端反饋。雖然代碼是一行一行執行,但是在實際的過程中發現,在后端進行解析過程時,前端並沒有等待后端的反饋,而是直接執行了下面的代碼,因此這里需要使用嚴格的執行順序。
2.1 不太完美的解決方案
這里有一個思路就是過一段時間之后在執行后端反饋的代碼,這里有一個弊端就是,時間設置的長短,時間長了,后端已經處理完成,沒必要繼續等待,時間短了還沒有處理完成就會出現前端報錯的情況。因此這個解決方案可以解決問題,但是存在一定的問題。
2.2 其余的解決方案
把操作結果放在then中,也就是使用promise的方式,這樣在處理完成之后就會執行邏輯代碼,可以得到反饋的結果,這個方法避免了在success中的操作,可以直接操作后續內容。
三、總結
使用鈎子函數,回調函數,或者是promise的方法都會使得異步的處理更加的可靠。