Promise串行执行

简介

前几天去面试,面试官问我Promise串行的实现,当时大脑太紧绷了,没有思路,但是一出来,坐上地铁没回答出来的问题,都想起来了,唉,真的好气呀,要是心里素质好点该多好,接下来,我就分享下我的实现思路,大家可以参考下,当然有好的思路,还请多多赐教。

promise数组如下

       const promise1 = new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(5)
                },200)
        })
       const promise2 = new Promise((resolve, reject) => {
                 setTimeout(() => {
                    resolve(1)
                },300)
        })
     
        const promise3 = new Promise((resolve, reject) => {
                setTimeout(() => {
                    resolve(7)
                },100)
        })
        var arr=[promise1,promise2,promise3];

async

这个是我坐上地铁,第一个想起来的,就是利用async函数,

        var fn=async function(arr){
            for(let i=0,len=arr.length;i<len;i++){
                var result=await arr[i]
                console.log(result)
            }
         }   
         fn(arr)

Generator

        const Cgenerator = function (arr) {
            const fn = function* () {
                for (let i = 0, len = arr.length; i < len; i++) {
                    yield arr[i]
                }
            }
            const gen = fn();

            const step = function (nextF) {
                let next=nextF()
                if (next.done) {
                    return;
                }
                if (next.value) {
                    next.value.then((data) => {
                        console.log(data)
                        step(() => { return gen.next(); })
                    })
                }
            }
            step(() => { return gen.next(); })
        }
        Cgenerator(arr)

Promsie.resolve()

       const promiseThen=function(arr){
            let res=Promise.resolve()
            arr.forEach(item => {
                res=res.then(()=>{
                    return item    
                }).then((data)=>{
                    console.log(data)
                })
            });
        }
        promiseThen(arr)

你可能感兴趣的:(ES6)