Promise是異步編程的一種解決方案,在ES6中Promise被列為了正式規范,統一了用法,原生提供了Promise對象,可以通過new 一個promise來使用它。
就我而言,使用並發請求的場景還是不會很少的,Promise簡直太完美,太好用。
1、使用Promise並發的方法:
注:all會等兩個成功才表示請求成功(如果其中一個接口被跨域或者網絡中斷了,那么這整個promise.all就會失敗),如果一個接口處於pending狀態,那么resultData這個值會一直處於等待狀態。
使用all方法
//請求1
fetch1 = () => {
return http.post(`/aa/1`).then(res => { //return整個promis結果,返回給resultData,resultData通過.then接收
if (res.code === 0) {
return res.data;
}
});
};
//請求2
fetch2 = () => {
return http.post(`/aa/2`).then(res => { //return整個promis結果,返回給resultData,resultData通過.then接收
if (res.code === 0) {
return res.data;
}
});
};
const resultData = Promise.all([fetch1,fetch2]) //異步並發,里面有幾個就寫幾個 resultData.then(res=>console.log(res)) //通過.then獲取的都異步請求結果,是一個數組,長度與上面並發里面數組的長度一樣,就是每個接口相對應的結果
2、Promise並發使用的場景:
1、之前我有個用戶列表有重置按鈕和編輯的功能,這兩個都是不同接口。
2、現在需求變更了,需要將重置密碼改到編輯彈窗里面,給用戶輸入密碼。點擊確定時候需要去同時做到兩個接口處理完畢loading后才關閉彈窗的效果
這時候就需要並發異步請求去請求接口了。(題外話:做法可以通過后端直接修改接口去完成,前端也不用並發,但是前端處理並不難。)
事實上這種場景還是有很多的,如:需要通過獲取兩個接口的值,然后再去等這兩個接口請求的值,作為參數去請求另一個接口的情況也有過。我就不一一例舉了。
末尾貼以下promis基本用法鏈接:這個人寫的很清楚了,我只是貼出實際應用場景來結合用法。
https://www.jianshu.com/p/3023a9372e5f