浅谈promise

63 阅读1分钟

promise是什么

promise是一个异步编程解决方案,可以解决回调地狱的问题

promise是一个构造函数,用于生成promise实例。构造函数接受一个函数作为参数,该函数的两个参数分别是resolve和reject(可选),这两个参数也分别是一个函数。当promise执行结果为true时,会调用resolve,当promise执行结果为false时,调用reject

let P = new Promise(function(resolve, reject){
        setTimeout(function(){
            let rand = Math.random();
            满足条件返回resolve给.then
            if(rand<0.5){
                resolve("resolve" + rand);
            }
            不满足条件返回reject给.then
            else{
                reject("reject" + rand);
            }
        },1000);
    });

promise的方法

Promise.then

promise实例的.then方法有一个参数,当执行结果为true时,该参数是resolve方法的返回值,当执行结果为false时,该参数是reject方法的返回值

Promise.catch

当promise执行失败时,会抛出一个错误即是.catch方法的参数

Promise.finally

promise的finally方法不管promise执行成功还是失败都会执行

promise还有两个机制

等待机制

Promise.all([第一个异步任务,第二个异步任务,...]) 传入一个数组,该方法会等待数组中所有异步任务执行完毕后一起返回结果

当一个区块需要同时调用多个接口数据来渲染时,可以通过promise的等待机制使数据全部获取到了再一起进行渲染,防止分开渲染导致的闪屏问题,同时也可以防止数据量大,代码混乱后续不好维护

赛跑机制

Promise.race([第一个异步任务,第二个异步任务,...])传入一个数组,该方法会返回数组中第一个执行完毕的异步任务的结果