今天跟同事吃飯,無意間談到了一個技術問題。
假如有多個異步函數,按照某個順序執行異步函數,結果依然按照此順序返回。
emmm...,按照自己的理解,隨意寫了一個方法。
主要用到Promise方法,話不多說,直接上代碼:
1. 定義異步函數p1、p2和p3。
1 var p1 = function (){ 2 return new Promise((resolve, reject) => { 3 setTimeout(() => { 4 resolve('p1') 5 }, 1000); 6 }) 7 } 8 var p2 = function (){ 9 return new Promise((resolve, reject) => { 10 setTimeout(() => { 11 resolve('p2') 12 }, 500); 13 }) 14 } 15 var p3 = function (){ 16 return new Promise((resolve, reject) => { 17 setTimeout(() => { 18 resolve('p3') 19 }, 100); 20 }) 21 }
2. 將異步函數,按照自己定義的順序,放到一個數組里
1 var fnArr = [p2, p1, p3];
3. 定義函數
1 var run = function (arr, start = 0){ 2 if(start > arr.length || start < 0) return; // 參數start不能超過 arr.length,不能為負數 3 var next = function (i){ 4 if(i < arr.length){ 5 var fn = arr[i]; 6 fn().then(res => { 7 console.log(res); 8 i++; 9 next(i) 10 }) 11 } 12 } 13 next(start) 14 }
run(fnArr); // 執行方法
4. 輸出結果,如圖:
綜上所述。
如果文章中存在錯誤的地方,麻煩請大家在評論中指正,以免誤人子弟,謝謝!