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([第一个异步任务,第二个异步任务,...])传入一个数组,该方法会返回数组中第一个执行完毕的异步任务的结果