js按順序執行多個異步函數


今天跟同事吃飯,無意間談到了一個技術問題。

假如有多個異步函數,按照某個順序執行異步函數,結果依然按照此順序返回。

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. 輸出結果,如圖:

綜上所述。

 

如果文章中存在錯誤的地方,麻煩請大家在評論中指正,以免誤人子弟,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM