最近在項目中遇見一個 promise 使用方式的問題,大概需求是,頁面多個表單,必須同時通過之後,才能發起網絡請求; 驗證過程,報了一個reject()錯,谷歌瀏覽器報錯進入斷點調試模式。
錯誤如下:
問題原因:
如果在 Promise 處理異常之前就執行了 reject() ,就會認爲這個promise沒有處理異常的過程,然後就報錯了,原因如下。
- (1)只要沒有在 Promise 的後面緊跟.catch或.then處理異常就會觸發這個錯誤機制。
- (2)不能在同步過程中觸發 reject() ,因爲這個時候異常處理還沒有掛載到 promise 上,也就是說promise 不能立即執行 reject(),需要增加一個定時器,模擬異步調用解決這個問題。
代碼如下:
解決如下:
我代碼 new Promise() 裏面有涉及到element ui 表單驗證操作,可以也是一個 this.$refs[formName].validate() 這個方法也是一個 promise, 所以在下面對創建的每個 promise 實例,執行了result.then().catch() 實例化操作。