JS實現序列請求

一隻菜鳥攻城獅啊發表於2020-09-13

使用async和await

1 var fn = async function(promiseArr) {
2     for(let i = 0,len = arr.length; i<len; i++) {
3         currentPromise = (promiseArr[i] instanceOf Promise) ? promiseArr[i]  : Promise.resolve(promiseArr[i]);
4         var result = await currentPromise;
5         console.log(result)
6     }
7  }   
8  fn(arr)

Promise實現

依照 promises 規範,一旦一個 promise 被建立,它就被執行了。如果then方法裡返回的是一個promise物件,那麼執行下一個then 的時候必定是在上一個then執行完之後執行。

關鍵點在於then的時候再建立

 1 var createPromise = function(time) {
 2     return (resolve, reject)=> {
 3       return new Promise((resolve, reject)=>{
 4           setTimeout(()=>{
 5               console.log('timein'+time)
 6               resolve();
 7           }, time*1000)
 8       })
 9     }
10 }
11 
12 function serpromise(arr) {
13     arr.reduce((pre, next, index, carr)=>{
14         return pre.then(next)
15     }, Promise.resolve())
16 }
17 
18 var arr=[createPromise(2),createPromise(1),createPromise(3),createPromise(4),createPromise(5)];
19 // 相當於
20 // Promise.resolve().then(createPromise(2)).then(createPromise(1))......
21 serpromise(arr)

參考自

https://cloud.tencent.com/developer/article/1525757

https://www.jianshu.com/p/3cb6ab992adb

相關文章