①. Promise的概述和使用
- ①. Promise是异步编程的一种解决方案,从语法上讲,Promise是一个对象,从它可以获取异步操作的消息
- ②. 好处
可以避免多层异步调用嵌套问题(回调地狱)
Promise对象提供了简洁的API,使得控制异步操作更加容易
③. 具体使用步骤
实例化Promise对象,构造函数中传递函数,该函数中用于处理异步任务
resolve和reject两个参数用于处理成功和失败两种情况,并通过p.then获取处理结果
var p = new Promise(function (resolve, reject) { setTimeout(() => { if (false) { resolve('TANGZHI'); } else { reject('ERROR'); } }, 2000); }); p.then(function (ret) { //这是成功调用的结果 console.log(ret); },function(ret){ //这是失败的结果 console.log(ret); });
②. Promise常用API(实例方法)
- ①. .then():得到异步任务正确的结果
- ②. .catch():获取异常信息
- ③. .finally():成功与否都会执行(不是正式标准)
<script> //console.dir():可以显示一个对象所有的属性和方法,用来对一个对象进行检查(inspect),并以易于阅读和打印的格式显示。 //console.dir(Promise); //第一种方法 function po(){ return new Promise(function(resolve,reject){ setTimeout(function(){ //resolve('hello xiaozhi'); reject('Error'); },3000); }); } //第一种方式 po() //方法成功时会调用这里 .then(reponse=>{ console.log(reponse); }) //方法失败时会调用这里 .catch(reponse=>{ console.log(reponse); }) //无论方法是否成功,这里都会被调用 .finally(()=> console.log('finished') ); //第二种方式 //[第一种方式和第二种方式是等价的] po() .then(function(ret){ //这里是成功后的回调 console.log(ret) },function(ret){ //这里是失败后的回调 console.log(ret); }) .finally(()=>{ alert("第二种方式finally...") }); </script>
③. Promise中的静态方法
①. Promise.all()接受Promise对象组成的数组作为参数,它的返回参数也是数组。当promise的全部为resolve后,它才会进入.then()方法,只要有一个promise为reject,它就会进入.catch()
并发处理多个异步任务,所有任务都执行完成才能得到结果
②. Promise.race()接受的参数与Promise.all()一样,不同的是,它会辨别最快达到resolve或者reject的promise对象,如果这个最快是resolve,则进入.then()方法,如果是reject,则进入.catch()方法。
并发处理多个异步任务,只要有一个任务完成就能得到结果