Promise

关于promise的各种知识

重试retry

//方式1
function retry(fn,times,delay){
    return new Promise((resolve,reject)=>{
        var attemp = function(){
            fn().resolve(resolve).catch(err=>{
                if(times==0){
                    reject(err)
                }else{
                    times--;
                    setTimeOut(()=>{
                        attemp()
                    },delay)
                }
            })
        }
    })
}

//方式2
function retry(fn,times,delay){
    return new Promise((resolve,reject)=>{
        var attemp = function(){
            fn().then(resolve(),err=>{
                if(times==0){
                    reject(err)
                }else{
                    times--;
                    setTimeOut(()=>{
                        attemp()
                    },delay)
                }
            })
        }
    })
}

Promise

Promise本身是同步的立即执行函数, 当在executor中执行resolve或者reject的时候, 此时是异步操作, 会先执行then/catch等,当主栈完成后,才会去调用resolve/reject中存放的方法执行,打印p的时候,是打印的返回结果,一个Promise实例。

实现一个promise.finally

Promise.all([p1,p2,p3])

全部执行完成再执行then函数,适用于多个请求调用返回结果后处理使用。

Promise.race()

Promise.race()方法最初是在 ES6 中引入 Promise 时发布的,这个方法需要一个iterable作为参数。

Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise 就会解决或拒绝。

Promise.any()方法不同,Promise.race()方法主要关注 Promise 是否已解决,而不管其被解决还是被拒绝。

Last updated

Was this helpful?