当前位置: 首页 > Web前端 > JavaScript

快速总结一下ES6中Promise的常用方法

时间:2023-03-27 15:53:22 JavaScript

Promise有时间可以详细看看阮一峰的教程。参考教程1什么是Promise?它解决了什么问题?Promise是一个保存异步操作结果的对象。Promises取代了传统的异步编程(回调函数、事件)解决方案,并且更加强大。Promise的两个特点(1)对象的状态不受外界影响,pendingfulfilledrejected,inprogress,successful,failed(2)状态一旦改变,就不会再改变。Promise的三个缺点(1)不能中途取消,一旦创建,立即执行(2)如果不设置回调函数,Promise内部的错误不会反映到外部?(1)promise的构造函数是同步执行,会在Promise创建后立即执行(同步)。(2)then方法是异步执行的。Promise常用的方法如下:5.then()then方法是Promise实例状态发生变化时的回调函数。then方法的参数是resolverejectthen方法返回一个新的Promise实例。六catch()catch方法是用来处理错误的回调函数。七finally()finally方法会执行操作,不管Promise对象的最终状态如何。使用场景:请求结束时加载动画...七all()all方法接受一个或多个Promise的数组实例。在all方法中:如下例子:只要参数中有一个Promise实例被拒绝,最终结果就是被拒绝,总是返回第一个被拒绝的实例letb1=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('b1succeeded')},1000);})letb2=newPromise((resolve,reject)=>{setTimeout(()=>{reject('b2failed')},500);})letb3=newPromise((resolve,reject)=>{setTimeout(()=>{reject('b3failed')},200);})Promise.all([b1,b2,b3]).then(res=>{console.log(res);//Uncaught(inpromise)b3failed})在all方法中:下面的例子:参数中的所有Promise实例都被fulfilled,最后结果是fulfilledletb1=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('b1succeeded')},1000);})letb2=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('b2成功')},500);})letb3=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('b3成功')},200);})Promise.all([b1,b2,b3]).then(res=>{console.log(res);//['b1成功','b2成功','b3成功']})八race()race方法接受一个或多个Promise实例的数组race方法的最终状态:第一个结束的实例是什么状态,最后的结果是什么。请详细比较以下示例。下面这个例子就像同时和三个女生聊天,看哪个回复你快。letb1=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('b1succeeded')},1000);})letb2=newPromise((resolve,reject)=>{setTimeout(()=>{reject('b2failed')},100);})letb3=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('b3succeeded')},10).b1是什么并不重要})Promise.race([b2,b3]).then(res=>{console.log(res);//b3成功//之后直接返回结果实例b3先成功,不管b2})九allSettled()allSettled方法接受一个或多个Promise实例的数组。allSettled方法不管这组实例的最终结果是什么,反正它会直到这组实例全部执行完毕才执行。letb1=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('b1succeeded')},1000);})letb2=newPromise((resolve,reject)=>{setTimeout(()=>{reject('b2failed')},100);})letb3=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('b3succeeded')},10);})Promise.allSettled([b1,b2,b3]).then(res=>{console.log(res);/*[{status:'fulfilled',value:'b1succeeded'}{status:'rejected',reason:'b2failure'}{status:'fulfilled',value:'b3success'}]*/})10any()任何方法接受一个或多个Promise实例的数组。any方法总是返回组中第一个成功的实例,如果组中的所有实例都失败:最终结果为失败。leta1=newPromise((resolve,reject)=>{setTimeout(()=>{reject('a1失败')},10);})leta2=newPromise((resolve,reject)=>{setTimeout(()=>{reject('a2失败')},50);})leta3=newPromise((resolve,reject)=>{setTimeout(()=>{resolve('a3成功')},100);})Promise.any([a1,a2,a3]).then(res=>{console.log(res);//a3成功})//------------------------------------------------------让a1=newPromise((resolve,reject)=>{setTimeout(()=>{reject('a1失败')},10);})leta2=newPromise((resolve,reject)=>{setTimeout(()=>{reject('a2失败')},50);})leta3=newPromise((resolve,reject)=>{setTimeout(()=>{reject('a3失败')},100);})Promise.any([a1,a2,a3]).then(res=>{console.log(res);//所有承诺都被拒绝})